如何让Discord bot向所有已加入服务器的可访问文本频道发送消息
代码修改方案
实现逻辑
要实现向所有有权限的文本频道群发,只需要遍历bot已加入的所有服务器,筛选符合条件的频道后逐一发送即可,具体判断逻辑如下:
- 遍历bot关联的所有服务器(
client.guilds) - 对每个服务器下的所有频道做两层校验:
- 频道类型为普通文本频道,排除语音频道、频道分类、帖子频道等非文本类型
- bot自身在该频道拥有发送消息的权限
- 对符合条件的频道提交发送任务
完整修改代码
import discord # 若已导入可忽略该行 # 原固定单频道逻辑替换为下方遍历逻辑 for guild in client.guilds: for channel in guild.channels: # 校验频道类型和发送权限 if channel.type == discord.ChannelType.text and channel.permissions_for(guild.me).send_messages: # 注意原代码的send调用末尾缺少右括号,此处已补全 client.loop.create_task(channel.send("abc"))
可选优化建议
- 如果需要跳过部分指定频道,可以新增黑名单判断逻辑,比如
if channel.id not in [需要排除的频道ID1, 需要排除的频道ID2],加入判断条件即可 - 若服务器和频道数量较多,可在发送逻辑中添加少量延时避免触发Discord官方的请求频率限制,导入
asyncio后在发送前添加await asyncio.sleep(0.3)即可
内容的提问来源于stack exchange,提问作者terry555
相关产品推荐
相关产品推荐

