有人提及我该如何使漫游器响应?不和谐

时间:2020-06-07 01:13:40

标签: discord.py discord.py-rewrite

这是我尝试过的代码:

@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.")

但是它似乎不起作用。

3 个答案:

答案 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。在文档中,它会指出某些东西是否是协程。


参考:

答案 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()