Как передать аргументы через пробел в discord.py?

  • 20 августа 2023 г. 4:36
Ответы на вопрос 2
В Discord.py аргументы, передаваемые через пробел, могут быть получены с помощью POI (параметров без указания типа). В вашем случае, вы уже используете POI, указав `*, a, b` в объявлении функции `bog`.

В качестве примера, если вы вызовете команду в Discord с двумя аргументами, они будут автоматически присвоены переменным `a` и `b`. Например, если вызовете команду как `!bog hello world`, переменная `a` будет равна `"hello"`, а переменная `b` - равна `"world"`.

```python
@commands.command()
async def bog(self, ctx, *, a, b):
    if ctx.channel.id == desired_channel_id:
        print(a)
        print(b)
```

В данном примере, когда функция `bog` вызывается для обработки команды, она получает значения `a` и `b`, и печатает их.

Примечание: Если вы хотите передавать аргументы, разделенные пробелами, внутри других аргументов функции, вы должны использовать двойные кавычки (`"`) в Discord для обозначения пробела внутри аргумента. Например, если вы хотите передать `"hello world"` как один аргумент в команду `!bog`, вы должны вызывать команду как `!bog "hello world"`.
Вы должны полностью понимать, что происходит с данными в коде, включая внутреннюю структуру библиотеки бота. Постарайтесь разобраться в коде библиотеки и понять, как она работает.

Если у вас создается впечатление, что в вашем коде возможно подавляются ошибки с помощью конструкции `try: except Exception`, из-за чего "ничего не происходит", вам следует проверить соответствующую часть кода и убедиться, что ошибки не подавляются намеренно.

В случае использования аргументов функции после символа `*` ожидаются именованные аргументы `a` и `b`. Если функция вызывается без указания этих аргументов, она должна сообщить об ошибке, но возможно где-то это не происходит из-за ошибки в коде.

Чтобы решить эту проблему, можно попробовать использовать символ `*` следующим образом:

```python
def bog(ctx, *args):
    print(f'ctx = {ctx}')
    a, b = args[-2:]
    print(a)
    print(b)

def call_bog(commands: str):
    args = tuple(commands.split(' '))
    bog(*args)

call_bog('one two three four')
```

Похожие вопросы