所以我创建了一个书签机器人,它会向对带有书签表情符号的消息做出反应的用户发送 DM。机器人将 DM 中的消息 URL 发送给用户,并用 X 表情符号做出反应。这个想法是,当用户在 DM 频道中对 X 表情符号做出反应时,消息也会删除。
但是,它不太正常。并且在导航到 DM 频道时消息会自行删除。
这是我的代码;
import discord
import os
from datetime import datetime
intents = discord.Intents.default()
intents.members = True
embed = discord.Embed()
client = discord.Client()
@client.event
async def on_ready():
print('We have logged in as {0.user}'.format(client))
@client.event
async def on_raw_reaction_add(payload):
message_id = payload.message_id
channel_id = payload.channel_id
channel = client.get_channel(channel_id)
if isinstance(channel,discord.channel.DMChannel) == False:
emoji = payload.emoji
user = payload.member
message = await channel.fetch_message(message_id)
if emoji.name == "?":
print(user.id)
print(message.content)
print("Channel ID = " + str(channel_id))
#print(emoji.name)
send = await user.send("**Bookmark Created:** " + str(datetime.now())[:-7] + "\n" + message.jump_url)
await send.add_reaction("❌")
elif isinstance(channel,discord.channel.DMChannel) == True:
dm_message_id = payload.message_id
dm_channel_id = payload.channel_id
#guild_id = payload.guild_id
#guild = client.get_guild(payload.guild_id)
dm_channel = client.get_channel(dm_channel_id)
dm_emoji = payload.emoji
dm_user = payload.member
dm_message = await dm_channel.fetch_message(dm_message_id)
if dm_emoji.name == "❌":
await dm_message.delete()
client.run(os.getenv('TOKEN'))
任何帮助将不胜感激:)
答案 0 :(得分:1)
您要确保机器人不会响应它自己的反应。您可以围绕您不希望机器人响应的任何内容添加此检查。
if payload.member == client.user:
或者如果您还想忽略其他机器人。
if not(payload.member.bot):
答案 1 :(得分:0)
在查看您的评论后,我明白了问题所在。当用户对消息做出反应时,用户做出反应的消息是被删除的消息,不是被“添加书签”的消息。根据我对代码的理解,您的目的是删除消息正文中链接的消息(即消息正文中的 url,您可以通过执行 message.contents 提取)。
要将消息 url 转换为实际平均值,您可以使用 discord.py 中可用的 MessageConverter 类。您将需要使用 convert 方法。按以下顺序查找(来自文档):
查找策略如下(按顺序):