这是我尝试过的代码:
@client.event
async def on_message(message):
if client.user.mention in message.content.split():
await client.say("You can type `!vx help` for more info.")
但是它似乎不起作用。
答案 0 :(得分:1)
使用命令修饰符时,您可以执行以下操作:
from discord.ext import commands # necessary for this task
client = commands.Bot(command_prefix=commands.when_mentioned_or("!"))
或者使用on_message()
事件,这是您可以查看提及的多种方式之一:
@client.event
async def on_message(message):
if client.user.mentioned_in(message):
await message.channel.send("You can type `!vx help` for more info")
此外,我注意到您向频道发送消息的方法不太正确。
在d.py重写(v1.x)中,您有一个abc.Messageable
对象,顾名思义,该对象类似于服务器的文本通道,DM或群聊。
此对象有一个名为send()
的方法,该方法使您可以发送内容。您会发现一些常见的情况; ctx.send()
在使用命令修饰符时-它们以Context
作为第一个参数-而在使用message.channel.send()
事件时则像on_message()
一样。它也会出现在其他地方,但这将是最常见的。
您已经正确地知道它是协程,因此需要await
。在文档中,它会指出某些东西是否是协程。
参考:
commands.when_mentioned_or()
ClientUser.mentioned_in()
abc.Messageable
-查看可以send()
发送消息的内容。commands.Context
-这是从abc.Messageable
继承的。Messageable.send()
答案 1 :(得分:1)
@client.event async def on_message(message):
if client.user.mention in message.content.split():
await client.say("You can type `!vx help` for more info.")
代替 content.split() 使用内容: 而不是 client.say 使用 message.channel.send() 所以我们会得到
@client.event
async def on_message(message):
if client.user.mention in message.content:
await message.channel.send("You can type `!vx help` for more info.")
答案 2 :(得分:0)
这是使用类的类似解决方案。我遇到了确切情况的问题并最终设法解决了它,但找不到任何这样的例子。关键是 if self.user in message.mentions:
行。
message.mentions
指的是用户列表,以便您可以查看自己或其他人。
class MyClient(discord.Client):
async def on_ready(self):
print('Logged on as', self.user)
async def on_message(self, message):
# Don't respond to ourselves
if message.author == self.user:
return
# If bot is mentioned, reply with a message
if self.user in message.mentions:
await message.channel.send("You can type `!vx help` for more info.")
return
def main():
client = MyClient()
client.run(DISCORD_TOKEN)
if __name__ == "__main__":
main()