如何修改Discord bot代码实现全服务器广播且避开规则频道
实现方案
Discord 官方给社区服务器的规则频道提供了专属的标识属性,不需要匹配频道名关键词即可精准识别,直接在遍历频道时过滤该属性对应的频道即可,还可以额外优化优先发送到服务器默认的系统通知频道,降低对其他频道的打扰。
修改后代码如下:
@client.command(pass_context=True) async def broadcast(ctx, *, msg): for server in client.guilds: # 优先尝试发送到服务器默认的系统通知频道(欢迎消息默认发送频道) if server.system_channel: try: await server.system_channel.send(msg) continue except Exception: pass # 系统频道不可用时遍历其他文字频道 for channel in server.text_channels: # 跳过服务器规则频道 if channel == server.rules_channel: continue try: await channel.send(msg) except Exception: continue else: break
改动说明
- 新增优先发送到
server.system_channel逻辑:该频道是服务器管理员设置的默认系统通知频道,本身就用于发送官方通知类内容,比随机遍历频道发送更符合服务器使用习惯 - 新增规则频道过滤逻辑:通过
server.rules_channel直接匹配官方标识的规则频道,无需适配不同服务器的规则频道命名,识别准确率100% - 保留原有异常捕获逻辑,自动跳过没有发送权限的频道
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

