我在获取命令后用户输入的命令方面遇到问题

时间:2019-07-08 16:24:48

标签: discord.py discord.py-rewrite

我正在为一个SandBox页面做一个Discord Bot。 我已经制作了一个程序,可以从您想要的任何用户那里抓取数据。 (它是输入,然后它会抓取数据) 现在有一个新问题。我想输入一个命令“ rr2.info.UserHere” rr2。是前缀,但我想创建一个命令,以获取在rr2.info之后键入的内容。并将其保存到变量中。

我尝试了一些在网上找到的代码,但是没有用。之后,我什么也找不到。

@client.event 
async def on_message():
    if message.content.startswith('rr2.info.'):
        #This is the part I need help with! :D 

我需要一种在rr2.info之后键入任何内容的方法。并且该命令已完成!

2 个答案:

答案 0 :(得分:0)

on_message()用作命令不是一个好习惯。

最好使用command(),最好使用discord.ext.commands

显然,您正在寻找一种将用户输入存储到变量中的方法,这是您可以执行的操作:

使用命令

您已将rr2定义为prefix。假设您使用的是 cog 系统:

@commands.command()
async def info(self, ctx, *, input: str):
   await ctx.send(input)
   return

await ctx.send(input)行将向使用该命令的通道发送一条消息,其中包含用户以input的身份传递的消息。

所以我们有:

>>> rr2 info This is my input.

输出:

'This is my input.'

使用on_message事件

如果您绝对要使用事件存储用户输入,则可以使用:

@client.event 
async def on_message(message):
    if message.content.startswith('rr2.info.'):
        input = message.content  # this will send the message with the 'rr2.info.' prefix

        channel = message.channel
        await channel.send(input)

这将具有与command()解决方案完全相同的行为。

答案 1 :(得分:0)

@client.event
async def on_message(message):
    if message.content.startswith('rr2.info.'):
        # Split method returns a list of strings after breaking the given string by the specified separator
        # Example input is 'rr2.info.uwu' then after calling input.split('rr2.info.')
        # we will get a list of ['', 'uwu'] , that's why we need to call second index to get the string after
        # 'rr2.info.' with [1]
        suffix = message.content.split('rr2.info.')[1]
        # Don't send it if it's empty, it will be empty if the user for example sent just 'rr2.info.'
        if suffix:
            await message.channel.send(suffix)
    else:
        # Overriding the default provided on_message forbids any extra commands from running.
        # To fix this, we add client.process_commands(message) line at the end of our on_message
        await client.process_commands(message)

我还建议将名称client更改为bot更好。

如果您想对commands做同样的事情,则必须更改命令ext函数的源代码,这主要是因为space被用作命令/参数之间的分隔符将其作为单个字符串传递。