如何使用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
相关产品推荐
相关产品推荐

