首页 > 解决方案 > 如何将下一行作为不和谐机器人的输入

问题描述

我正在制作一个不和谐的机器人,在用户键入某个命令后,我希望用户的下一行成为变量的输入。

所以:

import discord
@client.event

async def on_ready():
print('{0.user}'.format(client)+'logged in')
@client.event
async def on_message(message):

if message.author == client.user:
   return
if message.content.startswith('Lets play hangman'):
    message.channel.send('Please Guess a letter')
    userGuess = ### and here put whatever the user writes next (so no matter what is contained inside)

我唯一能找到的是,如果消息包含特定内容,那么当机器人执行某些操作时,但在这种情况下,无论如何我只想将整个消息作为输入。

标签: pythondiscord

解决方案


我不确定这是否是您要查找的内容,但简要查看discord.py 文档,它提供了如何等待用户回复的示例。

@client.event
async def on_message(message):
    if message.content.startswith('$greet'):
        channel = message.channel
        await channel.send('Say hello!')

        def check(m):
            return m.content == 'hello' and m.channel == channel

        msg = await client.wait_for('message', check=check)
        await channel.send('Hello {.author}!'.format(msg))

基本上,如果命令以 开头$greet,那么机器人会发回Say hello!. 然后,它会等到用户回复。

我建议采用msg与用户回复的消息相等的变量值并将其设置为userGuess.

所以:

userGuess = await client.wait_for('message')将是答案。

但这就是整个消息对象,只获取消息本身,然后.content在它之后追加。

功能代码:

@client.event
async def on_message(message):
    if message.author == client.user:
        return
    if message.content.startswith('Lets play hangman'):
        await message.channel.send('Please Guess a letter')
        userGuess =  await client.wait_for('message')
        //prints the message content into console
        print(userGuess.content)

推荐阅读