У меня проблемы с командой, которая получает то, что пользователь набрал после команды - PullRequest
0 голосов
/ 08 июля 2019

Я делаю Discord Bot для одной страницы SandBox. Я уже сделал программу, которая собирает данные от ЛЮБОГО пользователя, которого вы хотите. (Это ввод и после этого он удаляет данные) Теперь появилась новая проблема. Я хочу сделать команду "rr2.info.UserHere" Рр2. это префикс, но я хочу сделать команду, которая получает то, что вы набрали после 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 голосов
/ 09 июля 2019
@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 используется в качестве разделителя между командами / аргументами, и вы хотите передать это как одна строка.

0 голосов
/ 08 июля 2019

Не рекомендуется использовать on_message() в качестве команд.

Лучше использовать command() fom 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().

...