You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 21:54:32