Python开发Discord Bot:实现提取消息内容的自动回复功能
提取消息内容实现个性化回复的方法
针对你开发Discord Bot的需求,这里提供两种实用的方法来提取消息中的名称并生成对应回复:
方法一:字符串分割(简单直接)
利用字符串的split()方法,基于已知的前缀“My name is ”分割消息内容,直接获取后面的名称部分:
@client.event async def on_message(message): if client.user.id != message.author.id: prefix = "My name is " if prefix in message.content: # 分割前缀,取后面的部分作为名字,同时去除首尾空格 name = message.content.split(prefix)[1].strip() # 处理名字为空的边界情况 if name: await message.channel.send(f"Hi, {name}!") else: await message.channel.send("Hi! What's your name?")
这种方法适合格式固定的消息,代码简单易维护,但如果用户输入的前缀有变化(比如大小写不同、用“My name's”代替),就无法匹配。
方法二:正则表达式(灵活通用)
使用正则表达式可以匹配更多格式的消息,支持大小写、不同表述方式,适合扩展到类似的其他场景:
import re @client.event async def on_message(message): if client.user.id != message.author.id: # 正则匹配,支持大小写,兼容"My name is"或"My name's"的表述 match = re.search(r"my name(?: is|'s) (\w+)", message.content, re.IGNORECASE) if match: name = match.group(1) await message.channel.send(f"Hi, {name}!")
这里的正则表达式细节:
re.IGNORECASE:忽略大小写,能匹配“My Name Is”“my name's”等格式(?: is|'s):匹配“ is”或“'s”,不捕获这个分组(\w+):捕获一个或多个字母数字/下划线作为名称(如果需要支持带空格的名字,可改成([\w\s]+))
如果需要支持更复杂的名字格式,只需调整正则的捕获部分即可。
内容的提问来源于stack exchange,提问作者Flop
相关产品推荐
相关产品推荐

