discord.py如何获取on_message事件参数实现自动数学计算功能
Discord机器人on_message事件提取solve后表达式参数实现方案
核心实现逻辑
直接对消息内容做分割处理即可,核心要点是避免把带空格的数学表达式拆碎,同时做好异常边界判断:
- 第一步先过滤机器人自身发送的消息,防止循环触发回复
- 对用户发送的消息做首尾去空白处理,兼容用户不小心多打前后空格的场景
- 用限制最大拆分次数的字符串分割方法,把消息拆成
solve关键词、后续表达式两部分 - 增加空参数判断,用户只发
solve没带表达式时给出提示,避免索引报错
补全后可直接运行的代码
@client.event async def on_message(message): # 跳过所有机器人发送的消息,避免无限循环 if message.author.bot: return # 预处理消息内容:去掉首尾空格、换行 content = message.content.strip() # 不区分大小写匹配solve开头,支持Solve/SOLVE等写法 if content.lower().startswith("solve"): # 最多按空格拆分1次,保证表达式内部的空格不会被切断 content_parts = content.split(maxsplit=1) # 未携带表达式的异常处理 if len(content_parts) < 2: await message.channel.send("格式错误,请参考示例输入:solve 5*5") return # 提取到的纯数学表达式 expression = content_parts[1].strip() # 调用计算逻辑 await math(message, expression)
额外注意事项
- 数学计算处理逻辑不要直接使用原生
eval()解析用户输入,会存在任意代码执行的高危安全漏洞,建议使用simpleeval等专门的安全表达式解析库,或者基于AST做语法白名单校验后再计算。 - 上述提取逻辑兼容带空格的表达式输入,比如
solve 3 * (10 - 4) / 2这类写法也能正确拿到完整表达式。
内容的提问来源于stack exchange,提问作者Ruri
相关产品推荐
相关产品推荐

