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

Python开发Discord机器人时embed无法跨多服务器广播如何解决

问题原因

  • 核心逻辑错误:你通过wait_for拿到的broadcast是Message类对象,不是纯字符串,直接和"yes"做相等判断永远返回False,所以代码根本不会进入广播分支,只会执行else里的当前频道发送逻辑。
  • 无效参数错误:discord.py的Embed构造方法没有broadcast这个传入参数,属于冗余无效的传参。
  • 缺失异常和权限校验:直接遍历所有服务器所有频道发送嵌入,一旦机器人在某一个频道没有「发送消息」「发送嵌入消息」的权限,就会抛出异常中断后续所有发送任务,也会导致部分服务器收不到消息。
  • 色值格式错误:你填写的颜色值0xfffff只有5位十六进制数,标准RGB十六进制颜色为6位,正确的白色色值应为0xffffff。

修正后的代码

import asyncio
from discord.ext import commands

@client.command()
@commands.has_permissions(administrator=True) # 加管理员权限校验避免功能被滥用
async def make_embed(ctx):
    def check(message):
        return message.author == ctx.author and message.channel == ctx.channel

    await ctx.send('请输入标题')
    title = await client.wait_for('message', check=check)
  
    await ctx.send('请输入描述内容')
    desc = await client.wait_for('message', check=check)
  
    await ctx.send("是否要广播这条消息?请回复yes/no")
    broadcast_msg = await client.wait_for('message', check=check)
  
    # 构造embed,移除无效参数,修正色值
    embed = discord.Embed(title=title.content, description=desc.content, color=0xffffff)
    # 取用户输入的内容做判断,转小写兼容大小写输入
    if broadcast_msg.content.lower() == "yes":
        await ctx.send("正在开始广播...")
        for guild in client.guilds:
            for channel in guild.text_channels:
                try:
                    # 先校验机器人拥有对应权限再发送
                    if channel.permissions_for(guild.me).send_messages and channel.permissions_for(guild.me).embed_links:
                        await channel.send(embed=embed)
                        await asyncio.sleep(0.5) # 服务器数量多的话加延迟避免触发限流
                except Exception as e:
                    # 单频道发送失败不中断整体任务,可按需打印日志排查问题
                    print(f"向服务器【{guild.name}】的频道【{channel.name}】发送失败:{str(e)}")
                    continue
        await ctx.send("广播完成")
    else:
        await ctx.send(embed=embed)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:27:01