在 discord.py 中添加和响应反应

时间:2021-04-07 19:06:43

标签: python python-3.x discord.py

代码:

import discord

class MyClient(discord.Client):
    async def on_ready(self):
        print('Logged in as')
        print(self.user.name)
        print(self.user.id)
        print('------')



    async def on_message(self, message):
        words = [] # List of words to look for

        if message.author.id == self.user.id:
            return

        for i in words:
            if i in message.content.lower():
                await message.channel.send(f"Hey <@{message.author.id}>, i have noticed that in your message is a word on a list")
                break


            await message.add_reaction("✅")

            await client.wait_for("reaction_add")
            await message.delete()





client = MyClient()
client.run("TOKEN")

我怎样才能让机器人对自己的消息添加反应,如果用户使用它删除自己的消息 我确实在寻找答案,但上帝是 discord.py 乱七八糟的,我看到了 6 个不起作用的答案,而且所有答案似乎都使​​用了不同的模块

如果答案很容易找到,我深表歉意,但我就是找不到

2 个答案:

答案 0 :(得分:0)

首先,您应该始终尝试在文档 (discord.py documentation) 中找到答案。 (题外话:不是 discord.py 很乱;很可能是您用来查找答案的方法很乱。)

TextChannel.send() method 返回发送的消息。因此,您可以将该返回值分配给一个变量。

对于另一个问题,有一个事件侦听器可以检测消息删除,on_message_delete()

import discord

class MyClient(discord.Client):

    async def on_ready(self):
        ...

    async def on_message(self, message):
        words = []
        if message.author.id == self.user.id:
            return

        for i in words:
            if i in message.content.lower():
                sent_message = await message.channel.send(
                    f"Hey {message.author.mention}, I have noticed that in your message is a word on a list"
                )
                break

            await sent_message.add_reaction("reaction")
            await message.add_reaction("✅")
            await client.wait_for("reaction_add")
            await message.delete()

    async def on_message_delete(self, message):
        # Do stuff here


client = MyClient()
client.run("TOKEN")

(附带说明,您可以使用 Member.mention 来提及/ping 成员,而不是 "<@{message.author.id}>"。)

答案 1 :(得分:0)

在我看来,最好在事件方法上方使用 @client.event 方法装饰器,而不是将它们放在它们自己的类中。您可以在顶部将客户端对象声明为 client=discord.Client(),然后将 @client.event 放在事件处理方法的上方。 on_reaction_add 方法可以有reaction 和message 参数来响应。