如何使用Python中的Discord bot获取用户输入?

时间:2017-12-26 12:13:41

标签: python python-3.x discord discord.py

当我们输入某个命令并将输入存储到变量(但不是命令)时,我想从用户那里获取用户输入,以便我可以用它来做事。

例如,当用户键入“!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)

很抱歉,如果这是一个愚蠢的问题,但任何帮助都意味着很多。

3 个答案:

答案 0 :(得分: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了解有关字符串操作的更多信息。

答案 1 :(得分:0)

我会使用命令扩展名 - 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)

答案 2 :(得分:0)

您的漫游器向文本发送垃圾邮件的原因是因为您的漫游器正在说出它所遵循的命令。您需要阻止您的机器人将您的输出作为命令计数。您可以通过以下方式阻止它:

$mail->Host = 'webmail.abc.in'; //host $mail->SMTPAuth = false; $mail->Username = '******@abc.in'; $mail->Password = '*******'; $mail->SMTPSecure = 'tls'; $mail->Port = 25;

如果作者是机器人,这将返回None。或者,您可以阻止自己的机器人ID。如果您实际上使命令正常工作,则无需执行此操作,但仍应添加它。其次,我将命令和参数分开的方式是

if message.author.bot: return

有了这些变量,您可以做到

cmd = message.content.split()[0].lower()[1:]
args = message.content.split()[1:]