我正在为一个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之后键入任何内容的方法。并且该命令已完成!
答案 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.'
如果您绝对要使用事件存储用户输入,则可以使用:
@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
被用作命令/参数之间的分隔符将其作为单个字符串传递。