嗨,我正在尝试制作一个discord.py机器人,以便我可以拥有一个gif聊天频道,但是当有人在该频道中键入消息时,我的机器人就会开始重复他的消息,如果您知道,请帮忙。
我的代码:
@client.event
async def on_message(message):
with open("gif_chater.json", "r+") as file:
data=json.load(file)
if str(message.channel.id) in data:
if message.content.startswith("https://tenor.com/"):
print("wOw")
if not message.content.startswith("https://tenor.com/") and not message.author.id == "760083241133932544":
await message.channel.send("lol pls use gifs in this channel : )")
await message.delete()
exit
答案 0 :(得分:1)
可能是您多次运行了机器人。做ps -ef | grep {filename}
来查看正在运行的进程,然后通过运行kill {process id}
杀死它。
答案 1 :(得分:0)
问题在于,机器人不断对其自身做出响应,这是因为on_message
事件不仅在用户发送消息时触发,还在机器人发送消息时触发。这样,一旦它告诉用户他们只必须发布男高音gif,它就会对自己的消息做出反应并进入无限循环,并发布和删除其响应。
为防止漫游器响应其自身的消息,您应在事件like in the discord.py docs开始时添加一个检查:
@client.event
async def on_message(message):
if message.author == client.user:
return
...
代码中决定发送消息之前的最后一个条件是检查Messenger的ID(not message.author.id == "760083241133932544"
)。我不知道这是否是为了避免删除您或漫游器的消息,但是无论如何,检查本身都是错误的。 message.author.id
返回一个整数,但随后将其与字符串进行比较,由于类型冲突,它将始终返回False。
要解决此问题,请删除引号not message.author.id == 760083241133932544
,将ID更改为整数。同样,您应该使用不等于运算符!=
而不是not
来提高可读性:message.author.id != 760083241133932544
。
此外,由于您已经检查了消息是否以网站链接开头,因此您可以使用elif
语句来代替检查条件,因为else/elif
保证先前的条件为假(又名,该消息不是以网站链接开头):
if message.content.startswith("https://tenor.com/"):
print("wOw")
elif message.author.id != 760083241133932544:
await message.channel.send("lol pls use gifs in this channel : )")
await message.delete()
有了新的更改,您的函数可能看起来像这样:
@client.event
async def on_message(message):
# Don't respond to the bot's own messages
if message.author == client.user:
return
with open("gif_chater.json") as file:
data = json.load(file)
if str(message.channel.id) in data:
if message.content.startswith("https://tenor.com/"):
print("wOw")
elif message.author.id != 760083241133932544:
await message.channel.send("lol pls use gifs in this channel : )")
await message.delete()