Discord机器人搜索优先发帖频道如何兼容特殊字符匹配关键词
Discord 加入服务器后按关键词匹配频道发消息实现
原有代码缺陷
- 采用频道名精确匹配规则,频道名包含emoji、特殊Unicode字符、前后缀内容时会直接匹配失败
- 使用裸
except捕获所有异常,会吞掉权限不足、embed构建错误等关键报错,不利于排查问题 - 重复调用接口获取频道对象,存在冗余逻辑
修改后实现方案
匹配逻辑调整为按预设关键词优先级做模糊包含匹配,只要频道名(不区分大小写)包含目标关键词,且机器人拥有该频道的发消息权限,就判定为命中目标频道,发送内容后终止遍历。
@bot.event async def on_guild_join(guild): # 按优先级从高到低配置匹配关键词 target_keywords = ['cool-channel', 'awesome-server', 'chatters-be-chatting'] target_channel = None for keyword in target_keywords: for ch in guild.text_channels: # 统一转小写做包含判断,自动规避emoji、特殊字符、大小写差异带来的匹配失败问题 if keyword.lower() in ch.name.lower(): # 校验机器人在该频道的发消息权限 if ch.permissions_for(guild.me).send_messages: target_channel = ch break if target_channel: break if target_channel: # 此处替换为你的embed构建逻辑 # embed = discord.Embed(title="xxx", description="xxx") await target_channel.send(embed=embed)
匹配逻辑说明:Discord 文本频道的
name属性会保留所有emoji、特殊Unicode字符,采用子串包含判断的方式,不需要额外处理特殊字符即可完成匹配,例如频道名为🎉cool-channel聊天区,会被关键词cool-channel正常命中。
内容的提问来源于stack exchange,提问作者Do0ks
相关产品推荐
相关产品推荐

