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

Discord机器人多行消息处理异常:无法提取指定内容及换行符处理失效

问题:Discord机器人无法读取多行消息内容,提取n值失败

问题场景

我开发了一个Discord机器人,用于追踪频道消息并每24小时推送。目标是提取消息里random item 1和random item 2对应的n值,但当前遇到两个问题:

  • 只能访问消息的第一行内容,执行message.find("Today")返回-1;
  • 尝试用message.replace('\n', '')或message.strip("\n")去除换行符均无效——这些方法在常规多行字符串中正常工作,但用x = str(input("paste message"))输入消息时失效。

消息格式示例:

Daily Quest announcement | click here to report a problem
Today's Daily Quest is:
n of random item 1 For 40-50 coins
n random item 2 for 10-20 coins (n取值范围为1到200)
Today's Date:
May 25, 2023
Estimated Final Price:
50 coins
Price Prediction:
slowly Dropping

原因分析

  1. input()函数的局限性:input()默认仅读取到第一个换行符为止,粘贴多行消息时只会获取第一行,后续内容被直接忽略,因此找不到"Today"关键字。
  2. 换行符类型不匹配:Discord消息的换行符可能是Windows风格的\r\n,而非单纯的\n,只替换\n无法彻底清除换行标记,导致字符串处理异常。

解决方案

1. 解决多行输入测试问题

如果用input()测试多行内容,改用sys.stdin.read()读取完整输入:

import sys
message = sys.stdin.read()

粘贴多行消息后,按Ctrl+D(Linux/macOS)或Ctrl+Z(Windows)结束输入,即可获取完整的多行内容。

2. 统一处理换行符

处理Discord机器人获取的消息时,同时替换\r和\n:

# 清除所有换行相关字符
cleaned_msg = message.replace('\r', '').replace('\n', '')
# 或替换为空格,方便后续文本查找
cleaned_msg = message.replace('\r\n', ' ').replace('\n', ' ')

3. 用正则表达式精准提取n值

无需处理换行,直接用正则匹配目标数字,更可靠:

import re

# 匹配两种格式中的n值:"n of random item X" 和 "n random item X"
n_pattern = r'(\d+)(?: of)? random item \d'
n_values = re.findall(n_pattern, message)

if len(n_values) >= 2:
    item1_n = int(n_values[0])
    item2_n = int(n_values[1])
    print(f"Item 1的n值:{item1_n},Item 2的n值:{item2_n}")

内容的提问来源于stack exchange,提问作者farahead

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 21:45:20