INDMops
@INDMops
Парень с небольшой историей...

Как правильно записать переменные в функции?

У меня есть команда, где нужно ввести команду с названием книги и страннице в книге и оно возвращает его содержимое. Вот такие я переменные команда принимает:

@bot.command()
async def book(ctx, name=None, page=None):
   pass

В чате я ввожу: +book война и мир 45. И оно мне возвращает в переменной page символ "и", а должно "45". Что мне нужно изменить? Я знаю, что если ставить звездочку, то можно вводить в аргумент слова с пробелами, но на примерах я видел только одну переменную, не так как у меня.
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
В discord.py не слишеом сложные правила разбора строки с командой.
1. По умолчанию одно слово интерпретируется как один параметр.
async def command(ctx, a: str, b: str, c:str)
!command раз два три
a, b, c == "раз", "два", "три"


2. Если часть вводимой команды заключена в кавычки, то она интерпретируется как один параметр.
async def command(ctx, a: str, b: str)
!command "раз два" три
a, b == "раз два", "три"


3. Если последний параметр отмечен как "все позиционные аргументы" (*args), то все последующие слова попадают в него как отдельные элементы.
async def command(ctx, a: str, *b: str)
!command раз два три
a, b == "раз", ("два", "три")


4. Если последний параметр обозначен как "только ключевое слово" (..., *, param), то остаток строки подаётся в него как есть.
async def command(ctx, a: str, *, b: str)
!command раз два три
a, b == "раз", "два три"


Таким образом, у тебя есть два выхода.
а) помещай строку с названием книги в кавычки
б) поставь название книги последним параметром в своей команде

EDIT: ниже напомнили, что есть слэш-команды. Посмотри их!
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
fenrir1121
@fenrir1121 Куратор тега discord.py
Начни с документации
Дополню ответ выше.
Сейчас имеет смысл разрабатывать изначально на слеш-командах и у них каждый параметр принимается без какой-то доп обработки. По сути это аналогично вводу с кавычками, но более юзерфрендли
9FFzZyt.png
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы