如何用单个Discord Bot发送不同名称和头像的消息?
问题:单个Discord Bot如何发送不同名称和头像且历史消息不受影响的消息?
我在某Discord社区发现,单个Bot能发送带有不同名称和头像的消息。我知道Discord对用户名修改有限制,而且修改服务器昵称会让Bot过往消息的昵称同步变更,但这个社区里的Bot没有这个问题。我尝试过修改用户名(因频率限制无法再操作)和服务器昵称,代码如下:
const main = async (c: Client<boolean>) => { const guild = c.guilds?.cache.get(GUID) const channel = c.channels.cache.get(CID); const bot = c.user; if (!bot) return; if (!guild) return; if (!channel) return; if (channel.type !== ChannelType.GuildText) return; await guild.members.cache.get(bot.id)?.setNickname("User 1") const message = await channel.send("Hi there everyone"); await guild.members.cache.get(bot.id)?.edit({nick: "User 2"}) channel.send("doing fine"); await guild.members.cache.get(bot.id)?.setNickname("User 3") channel.send("yeah!"); };
请问如何实现单个Bot发送不同名称和头像且历史消息不受影响的消息?
解决方案
无需修改Bot的全局用户名或服务器昵称,只需在发送每条消息时单独指定显示名称和头像,就能让每条消息的标识独立,不会影响历史消息。
在Discord.js中,channel.send()方法支持传入配置对象,通过username和avatarURL参数实现需求,代码示例如下:
const main = async (c: Client<boolean>) => { const channel = c.channels.cache.get(CID); if (!channel) return; if (channel.type !== ChannelType.GuildText) return; // 第一条消息:使用User 1的名称和自定义头像 await channel.send({ content: "Hi there everyone", username: "User 1", avatarURL: "https://example.com/user1-avatar.png" // 替换为实际头像URL }); // 第二条消息:使用User 2的名称和自定义头像 await channel.send({ content: "doing fine", username: "User 2", avatarURL: "https://example.com/user2-avatar.png" }); // 第三条消息:使用User 3的名称和自定义头像 await channel.send({ content: "yeah!", username: "User 3", avatarURL: "https://example.com/user3-avatar.png" }); };
核心说明:
username:仅对当前发送的消息生效,不会修改Bot的全局或服务器昵称。avatarURL:仅设置当前消息的显示头像,不会改变Bot的默认头像。- 这种方式完全避开昵称修改的频率限制,每条消息的标识独立存储,历史消息不会因后续操作变更。
内容的提问来源于stack exchange,提问作者Luis Sebastian Urrutia Fuentes
相关产品推荐
相关产品推荐

