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

如何使用discord.py仅向服务器允许发消息的频道群发消息

问题解决方案

该报错是因为机器人遍历到了无发送消息权限的文本频道,直接调用发送接口触发了权限校验失败。

修改方案

  • 发送消息前增加权限校验,判断机器人在当前频道是否拥有send_messages权限
  • 增加异常捕获逻辑,避免偶发权限问题导致整个程序终止
  • 死循环中增加等待时间,避免短时间大量发送消息触发Discord限流、账号封禁机制

修改后的代码

import asyncio
import discord

@client.event
async def on_ready(): # 机器人启动完成后执行
    print("Ready!")
    while True: 
        for guild in client.guilds: # 遍历所有加入的服务器
            for channel in guild.channels: # 遍历服务器内所有频道
                # 先判断是文本频道,再判断机器人有发消息权限
                if isinstance(channel, discord.TextChannel) and channel.permissions_for(guild.me).send_messages:
                    try:
                        await channel.send('你要发送的消息内容')
                    except discord.Forbidden:
                        # 偶发权限问题直接跳过,避免程序崩溃
                        continue
                    # 可选:单条消息之间加1秒间隔,降低限流风险
                    await asyncio.sleep(1)
        # 一轮群发完成后等待足够时长,不要反复刷屏
        await asyncio.sleep(3600) # 示例为间隔1小时发一次,可自行调整

额外注意事项

  • 邀请机器人加入服务器时,需要确保勾选了发送消息的权限选项
  • 滥用群发功能会违反Discord服务条款,可能导致机器人账号甚至开发者账号被封禁,仅可在合规场景下使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:36:03