gpt4 book ai didi

python - Discord 机器人接受对消息的 react

转载 作者:行者123 更新时间:2023-12-01 00:21:44 24 4
gpt4 key购买 nike

我仍在学习 discord.py图书馆,所以我对任何菜鸟错误表示歉意。

下面的代码是执行 3 个操作的函数的一部分:

  1. 连接到 sqlite3 数据库
  2. 询问要创建什么套件名称并将新套件名称插入 sqlite3 数据库
  3. 询问用户是否愿意将卡片添加到他们的套件名称中。
 #To create a new kit
@client.command(name="createkit")
async def createkit(message):
author = message.author
await author.send("What name would you like to give the new kit?")
msg = await client.wait_for('message')
kitName = msg.content #name of kit user wants to make
userID = msg.author.id #User ID of the author of the reply message
userName = msg.author.name #Username of the author who wrote the reply message
db = sqlite3.connect('kits.sqlite')
cursor = db.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS kits(
DeckID INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
User TEXT NOT NULL,
UserID INTEGER NOT NULL,
Deckname TEXT NOT NULL
)
''')
print("Connected to Kits")
cursor.execute(f"SELECT * FROM kits WHERE UserID = {userID}")
sql = ("INSERT INTO kits(User, UserID, Deckname) VALUES(?,?,?)")
val = (userName, userID, kitName)
cursor.execute(sql, val)
db.commit()
await author.send(f"{kitName} has been created!")
addCards = await author.send(f"Would you like to add cards to {kitName}?")
await addCards.add_reaction('👍')
await addCards.add_reaction('👎')
reaction, user = await client.wait_for('reaction_add')
if user == client.user:
return
elif str(reaction.emoji) == '👍':
print(user)
await user.send('Great!') #<-- error
print("Replied with thumbs up!")
elif str(reaction.emoji) == '👎':
await user.send('Too bad...') #<-- error
print("Replied with thumbs down!")
cursor.close()
db.close()```

第 1 部分和第 2 部分工作正常,没有任何问题。第 3 部分要求用户用“竖起大拇指”或“竖起大拇指”表情符号使用react,会引发以下错误:

discord.ext.commands.errors.CommandInvokeError: 
Command raised an exception: AttributeError:
'ClientUser' object has no attribute 'send'

奇怪的是我将重新启动机器人并完成命令使用。我会用竖起大拇指的表情符号使用react,它会回复“太棒了!”不会产生任何错误。我将再次运行它并回复“大拇指朝下”或“大拇指朝上”,然后出现上述错误。第一次好像可以,但第二次就出错了。即使我不久后重新启动机器人,它也会失败。如果我在重新启动之前等待一段时间然后重试,机器人将工作一次,然后每次都会失败并出现同样的问题。我不确定问题是什么。我查看了其他一些似乎无法解决该问题的线程。

非常感谢任何提前的帮助!

最佳答案

您的错误原因是机器人正在尝试自行发送 DM。

Discord.py 的 wait_for 函数接受 check kwarg 允许您过滤特定事件。如果您不包含此检查,则库将等待来自任何地方的下一个该类型的事件(在本例中为reaction_add)。在您的具体情况下,恰好是机器人添加了 react :

await addCards.add_reaction('👍')
await addCards.add_reaction('👎')

解决此问题的一个简单方法是编写一个检查函数,只有在其他人添加该 react 时才会返回 True:

def check(reaction,user):
return not user.bot and reaction.message.id == addCards.id and str(reaction.emoji) in ['👍','👎']

reaction, user = await client.wait_for('reaction_add',check=check)

关于python - Discord 机器人接受对消息的 react ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58906513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com