如何在C#中排除Twitch聊天里以!开头的命令消息?
解决Twitch ChatGPT集成中排除!开头消息的问题
你的代码核心问题是混淆了「消息内容」和「发送消息的用户名」的判断逻辑,同时对消息的处理存在疏漏,导致!开头的命令消息没被正确过滤。下面是修正后的完整方案:
问题分析
- 你定义的
excludeGptReply是要排除的用户名列表,但原代码里却拿「消息内容」去和这个列表做比对,这完全是逻辑错误,根本没起到过滤指定用户的作用。 - 对!开头消息的判断没有处理消息前后空格的情况,比如用户输入
!command这种带前置空格的消息,StartsWith("!")会返回false,导致没被过滤。
修正后的代码
首先,你需要先获取发送当前消息的用户名(通常Twitch聊天事件的参数里会包含用户名,比如args["username"],具体字段名根据你用的Twitch SDK调整),然后结合消息内容做判断:
// 定义要排除的用户名列表(保持你的原有配置) List<string> excludeGptReply = new List<string>(); excludeGptReply.Add(chatbotName); excludeGptReply.Add(broadcaster); excludeGptReply.Add("streamelements"); excludeGptReply.Add("nightbot"); excludeGptReply.Add("streamlabs"); excludeGptReply.Add("pokemoncommunitygame"); excludeGptReply.Add("kofistreambot"); excludeGptReply.Add("fourthwallhq"); excludeGptReply.Add("fossabot"); // 获取发送消息的用户名和消息内容 string username = args["username"].ToString().ToLower(); string message = args["message"].ToString().Trim(); // 先判断用户是否在排除列表,再判断消息是否以!开头 if (excludeGptReply.Contains(username) || message.StartsWith("!")) { return true; // 跳过处理,不回复 }
关键修改点
- 区分用户名和消息内容:用
username去匹配排除列表,而不是拿消息内容去比对,这样才能正确跳过指定用户的所有消息。 - 处理消息空格:对消息内容先执行
Trim(),去掉前后空格,避免带空格的命令消息漏过滤。 - 合并判断逻辑:用
||(逻辑或)把两个条件合并,只要满足其中一个就跳过,代码更简洁。
内容的提问来源于stack exchange,提问作者Duby
相关产品推荐
相关产品推荐

