You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

discord.py on_reaction_add中获取embed描述发送至指定频道方法

实现方法

直接在原有逻辑基础上补充两个核心模块即可,具体修改点如下:

  • 频道前置校验:在票数判断逻辑最开头,通过reaction.message.channel.id匹配允许发起投票的频道ID,不匹配直接终止逻辑,避免非投票频道的反应误触发规则
  • 跨频道消息发送:通过bot实例的get_channel()方法拿到指定ID的目标频道对象,再提取原消息携带的embed内容发送即可,注意要先判断原消息是否存在embed,避免空值报错

修改后的可运行代码:

@commands.Cog.listener()
async def on_reaction_add(self,reaction, user):
    # 过滤机器人自身的反应,避免自触发
    if user.bot:
        return
    # 频道校验,替换为你自己的投票频道ID(整数类型,不要加引号)
    ALLOWED_VOTE_CHANNEL_ID = 123456789012345678
    # 替换为投票结果要发送的目标频道ID
    TARGET_SEND_CHANNEL_ID = 876543210987654321
    if reaction.message.channel.id != ALLOWED_VOTE_CHANNEL_ID:
        return

    if reaction.count == 2 and reaction.emoji == "✅":
        await reaction.message.reply(f"Votacion Aceptada")
        # 获取目标频道实例
        target_channel = self.bot.get_channel(TARGET_SEND_CHANNEL_ID)
        # 提取原消息embed
        if reaction.message.embeds:
            vote_embed = reaction.message.embeds[0]
            # 仅发送embed描述就传content参数,需要发送完整embed直接传embed参数即可
            await target_channel.send(content=vote_embed.description, embed=vote_embed)
    elif reaction.count == 2 and reaction.emoji == "❌":
        await reaction.message.delete()

注意事项:

  1. 所有频道ID必须传整数类型,不要加引号转成字符串,否则ID匹配会失败
  2. 如果运行后拿不到原消息的embed内容,需要去Discord开发者后台开启Message Content Intent权限,同时在bot实例初始化时配置对应intents参数
  3. 如果目标频道和bot不在同一个服务器,get_channel会返回空值,需要提前确认bot已经加入目标频道所在服务器、且拥有目标频道的发送消息权限

内容的提问来源于stack exchange,提问作者user15558580

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:09:18