如何在 Python 中使用我的 Discord 机器人获取用户输入?
Posted
技术标签:
【中文标题】如何在 Python 中使用我的 Discord 机器人获取用户输入?【英文标题】:How do I grab user input with my Discord bot in Python? 【发布时间】:2018-06-07 06:59:54 【问题描述】:我想在用户输入某个命令时从用户那里获取用户输入并将输入存储到一个变量(但不是命令)中,以便我可以用它来做事。
例如,当用户键入“!id 500”时,我希望机器人在频道中键入“500”。我试过只使用 message.content 但它不能正常工作,因为机器人会无限期地向它发送垃圾邮件,而且它还会显示命令。
@client.event
async def on_message(message):
if message.content.startswith("!id"):
await client.send_message(message.channel, message.content)
抱歉,这是一个愚蠢的问题,但任何帮助都意义重大。
【问题讨论】:
【参考方案1】:如果您希望机器人只发送用户的消息而没有命令部分(“!id”),您必须指定要发回的字符串的哪一部分。由于字符串实际上只是字符列表,因此您可以通过请求索引来指定您想要的字符串的哪一部分。 例如:
"This is an example"[1]
返回“h”。
在您的情况下,您只想摆脱字符串的开头部分,可以这样做:
@client.event
async def on_message(message):
if message.content.startswith("!id"):
await client.send_message(message.channel, message.content[3:])
这很有效,因为它从第 4 个索引位置开始发送回字符串(索引从 0 开始,所以实际上 [3] 是从第四个值开始)
如果您只想将用户的消息保存为变量,这也适用,因为您可以这样做:
userInput = message.content[3:]
您在python docs 上阅读了有关字符串操作的更多信息。
【讨论】:
【参考方案2】:我会使用命令扩展 - https://github.com/Rapptz/discord.py/blob/async/examples/basic_bot.py
然后发出类似的命令,
@bot.command(pass_context=True)
async def id(ctx, number : int):
await bot.say(number)
【讨论】:
【参考方案3】:您的机器人向文本发送垃圾邮件的原因是您的机器人正在说出命令,它会遵循该命令。您需要阻止您的机器人将您的输出计为命令。您可以通过以下方式阻止它:
if message.author.bot: return
。
如果作者是机器人,这将返回 None。或者,您可以阻止您的机器人自己的 ID。如果你真的让你的命令正常工作,你就不需要这样做,但你仍然应该添加它。其次,我分离命令和参数的方式是
cmd = message.content.split()[0].lower()[1:]
args = message.content.split()[1:]
有了这些变量,你可以做到
@client.event
async def on_message(message):
if message.content.startswith('!'):
if message.author.bot: return # Blocks bots from using commands.
cmd = message.content.split()[0].lower()[1:]
args = message.content.split()[1:]
if command == "id":
await client.send_message(message.channel, ' '.join(args)
【讨论】:
以上是关于如何在 Python 中使用我的 Discord 机器人获取用户输入?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Discord 机器人项目中运行额外的 Python 代码
如何让我的 Python Discord 机器人检查消息是不是由机器人本身发送?
如何使用 python 使用 discord.py 创建调平系统?