如何让我的 Discord Bot 提及我提及的人?
Posted
技术标签:
【中文标题】如何让我的 Discord Bot 提及我提及的人?【英文标题】:How can I make my Discord Bot mention someone I mentionned? 【发布时间】:2019-11-19 02:56:40 【问题描述】:我刚开始编写 Discord 机器人,但在提及某人时遇到了一个小问题。当我在任何频道的 Discord 上提及某人时,我希望我的机器人提及某人并说他有多酷,例如:
Dahkris: lul howcool @Myfriend Bot: @Myfriend is 80% cool !
(随机部分是函数)
由于我是 js 新手,我不知道这些参数是如何工作的,所以我不知道我应该使用@member 还是“member.displayName”等(我尝试了不同的类型)。我已经搜索过类似的代码,但通常机器人只提到消息的作者。
bot.on('message', message =>
if (message.startsWith === 'lul howcool')
if ( message.content === @member )
message.channel.send ( @member + ' is ' + ( Math.floor(Math.random() * 100) + 1 ) + "% cool ! " )
)
此代码似乎没有任何错误但不起作用,因为该消息从未包含“@member”(我认为)。
【问题讨论】:
【参考方案1】:const user = message.mentions.users.first();
message.channel.send(`$user //code`
其中 //code 是消息文本的其余部分和代码的其余部分
【讨论】:
【参考方案2】:您可以在字符串中使用@USER ID
,例如@766369570550186036
,您也可以格式化。我使用python,所以我的字符串格式是.format()
,但你应该能够使用格式。 (@USER ID
也适用于所有类型的代码,因为它是一个不和谐的功能。因此,如果您要键入包含 @USER ID
的消息(将“用户 ID”替换为用户 ID,它将提及该用户))
这是一个python示例:
await ctx.send("hello <@>".format(ctx.author.id)
【讨论】:
【参考方案3】:这是一个简单的代码 sn-p,用于评估提及踢:
文档在:https://discordjs.guide/creating-your-bot/commands-with-user-input.html#mentions
else if (command === 'kick')
// grab the "first" mentioned user from the message
// this will return a `User` object, just like `message.author`
const taggedUser = message.mentions.users.first();
message.channel.send(`You wanted to kick: $taggedUser.username`);
【讨论】:
【参考方案4】:所以我修复了代码并对其进行了测试,它可以正常工作。我选择了不同的方法,但结果是一样的。
client.on('message', async message =>
if (message.author.bot) return;
let mention = message.mentions.users.first()
if (msg.startsWith(".pfx howcool") && mention)
message.channel.send(`$mention is $Math.floor(Math.random() * 100) + 1% cool!`)
else if (message.content === ".pfx howcool")
message.channel.send(`You are $Math.floor(Math.random() * 100) + 1% cool!`)
);
【讨论】:
【参考方案5】:一条消息有一个mentions
属性,它是一个MessageMentions
,它有两个您可能感兴趣的属性:users
和members
。不同之处在于你想用它做什么。 members
是 GuildMember
的集合,而 users
是 user
的集合。
注意:您可以使用varGuildMember.user
从GuildMember
访问user
。
在这里你想提一个人。这两种类型都有一个toString()
方法,它返回一个提到用户的字符串。例如,如果您在变量oneUser
中有某人的实例,并且您执行channel.send('Hello ' + oneUser)
,则输出将为Hello @TheUser
。
如何使用它取决于你的命令是如何工作的(检查是否只有一个提及,有多少参数等)。
我将采用最简单的形式,即消息是否以lul howcool
开头并且是否包含用户的提及。如果有其他消息,它仍然可以工作。
bot.on('message', message =>
if (message.startsWith('lul howcool')) // this is how you use startsWith https://developer.mozilla.org/en-US/docs/Web/javascript/Reference/Global_Objects/String/startsWith
if (message.mentions.users.length > 0) // check if an user is mentionned
message.mentions.users.forEach((k, v) => // do something for each mentions
message.channel.send( v + ' is ' + ( Math.floor(Math.random() * 100) + 1 ) + "% cool ! " );
)
)
它将为消息中的每个提及(用户提及,而不是频道或角色)发送一条消息。
免责声明:我无法测试代码,因此可能存在错误。其背后的逻辑仍然可行。如果你想在发送消息后处理可能的错误,你不应该使用forEach
,而是使用for循环,因为forEach
不适用于promise see this。
【讨论】:
以上是关于如何让我的 Discord Bot 提及我提及的人?的主要内容,如果未能解决你的问题,请参考以下文章
如何让我的 discord.py 机器人提及我的消息中提到的某人?