希望我的机器人在用户对表情符号做出反应时删除消息

时间:2021-04-30 20:14:58

标签: python discord discord.py

所以我创建了一个书签机器人,它会向对带有书签表情符号的消息做出反应的用户发送 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'))

任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:1)

您要确保机器人不会响应它自己的反应。您可以围绕您不希望机器人响应的任何内容添加此检查。

if payload.member == client.user:

或者如果您还想忽略其他机器人。

if not(payload.member.bot):

答案 1 :(得分:0)

在查看您的评论后,我明白了问题所在。当用户对消息做出反应时,用户做出反应的消息是被删除的消息,不是被“添加书签”的消息。根据我对代码的理解,您的目的是删除消息正文中链接的消息(即消息正文中的 url,您可以通过执行 message.contents 提取)。

要将消息 url 转换为实际平均值,您可以使用 discord.py 中可用的 MessageConverter 类。您将需要使用 convert 方法。按以下顺序查找(来自文档):

查找策略如下(按顺序):

  1. 通过“{channel ID}-{message ID}”查找(通过按住 Shift 键点击“Copy ID”检索)
  2. 按消息 ID 查找(消息必须在上下文通道中)
  3. 通过消息 URL 查找