Форум сайта python.su
Всем доброго времени суток! Решил поучить “питон” и первый учебный свой проект решил посвятить написанию бота в “телегу”. После PHP (где таких проблем нет) мне тут головной боли добавил синтаксис (отступы и т.д.), на которые среда кодинга (PyCharm) ругается порой по “черному”… Но с этим я вроде справляюсь, суть в другом.
Я решил сделать в коде обработчик команд для бота с аргументами, в качестве первой такой команды выбрал возможность выводить случайное число из указанного диапазона чисел, по типу:
/rand 1 500
IndexError: list index out of range
x_min = int(message.text.split()[1])
import telebot import random API_BOT = "бота токен" ADMIN_USER_ID: list[int] = [мой айди в телеге] THIS_BOT = telebot.TeleBot(API_BOT) @THIS_BOT.message_handler(commands=['start']) def cmd_start(message): THIS_BOT.send_message(message.chat.id, f'<b>Привет, {message.from_user.first_name}! Я Ваш интерактивный помошник.</b>', parse_mode='html') @THIS_BOT.message_handler(commands=['rand']) def cmd_rand(message): x_min = int(message.text.split()[1]) x_max = int(message.text.split()[2]) if x_min < x_max: result = random.randint(x_min, x_max) THIS_BOT.send_message(message.chat.id, f"Случайное число: {result} ", parse_mode='html') else: THIS_BOT.send_message(message.chat.id, f"Ошибка! Неправильно указаны аргументы команды. \n Вы написали " f"следующее: /rand {x_min} {x_max}", parse_mode='html') @THIS_BOT.message_handler() def msg(message): if (message.text == "debug_info") and (message.from_user.id in ADMIN_USER_ID) is True: THIS_BOT.send_message(message.chat.id, message, parse_mode='html') if __name__ == "__main__": THIS_BOT.polling(none_stop=True)
Отредактировано weber (Ноя. 20, 2022 17:27:39)
Офлайн
нашел решение, которое помогло корректно работать обработчику команды, не знаю насколько это правильно, но как то так.. вот код:
import telebot import random API_BOT = "токен бота" ADMIN_USER_ID: list[int] = [айди пользователя бота-админа] THIS_BOT = telebot.TeleBot(API_BOT) @THIS_BOT.message_handler(commands=['start']) def cmd_start(message): THIS_BOT.send_message(message.chat.id, f'<b>Привет, {message.from_user.first_name}! Я Ваш интерактивный помошник.</b>', parse_mode='html') @THIS_BOT.message_handler(commands=['rand']) def cmd_rand(message): if len(message.text.split()[1:]) == 2: x_min = int(message.text.split()[1]) x_max = int(message.text.split()[2]) else: x_min = 0 x_max = 0 if x_min and x_max != 0: result = random.randint(x_min, x_max) THIS_BOT.send_message(message.chat.id, f"Случайное число: {result} ", parse_mode='html') else: THIS_BOT.send_message(message.chat.id, f"Ошибка! Неправильно указаны аргументы команды. \n Правильный пример: " f"/rand 1 100 \n Вы написали следующее: {message.text}", parse_mode='html') @THIS_BOT.message_handler() def msg(message): if (message.text == "debug_info") and (message.from_user.id in ADMIN_USER_ID) is True: THIS_BOT.send_message(message.chat.id, message, parse_mode='html') if __name__ == "__main__": THIS_BOT.polling(none_stop=True)
Офлайн
weberТебе надо не столько язык учить какой-то новый, сколько само программирование доязыковое. Знаешь, да, что такое псевдокод? Вот тебе надо сначала на псевдокоде учиться писать. К счастью, питон очень приближен к псевдокоду, поэтому он как раз в роли псевдокода и выступит.
Решил поучить “питон”
weberПроблема PHPшников в том, что у них складывается одинаковое мышление, которое сильно тупообразное. Поэтому в своей среде они чувствуют себя наверху горы и могут годами там классно писать всё, но когда они попадают в другие языки типа компилируемых, это их мышление просто оказывается непригодным и им надо учиться всему заново.
После PHP (где таких проблем нет)
weberТы бы на псевдокоде сначала написал бы очень конкретно, что тебе нужно получить в конечном итоге, так оно было бы оптимально, а потом бы ты это переписал уже на питон и всё бы получилось сразу.
нашел решение, которое помогло корректно работать обработчику команды, не знаю насколько это правильно
x_min = x_max = None text = message.text chatid = message.chat.id args = text.split()[1:] if len(args) != 2: bot.send_message(chatid, 'Error: should be two arguments') return try: x_min = int(args[0]) except ValueError: pass try: x_max = int(args[1]) except ValueError: pass if x_min is None: bot.send_message(chatid, 'Error: can\'t read min argument') return if x_max is None: bot.send_message(chatid, 'Error: can\'t read max argument') return if x_min == 0: bot.send_message(chatid, 'Error: zero min argument') return if x_max == 0: bot.send_message(chatid, 'Error: zero max argument') return bot.send_message( chatid, 'Ok. See min argument {} and max argument {}'.format( x_min, x_max) )
Отредактировано py.user.next (Ноя. 20, 2022 22:59:58)
Офлайн