|
0 / 0 / 0
Регистрация: 20.11.2022
Сообщений: 11
|
||||||||||||||||
Telegram Bot Бот на питоне для телеги - проблемы с обработкой команд20.11.2022, 22:24. Показов 2091. Ответов 18
Метки нет (Все метки)
поздновато может для меня учить программирование, но что не сделаешь ради хобби (хотя я чайник по вашим меркам ещё тот), решил начать знакомство с "питона" и первым проектом для себя выбрал - создание скрипта бота для телеги с возможностью обрабатывать команды, в т.ч. с параметрами (аргументами). Ну и чтоб бот часть команд воспринимал только от конкретных пользователей (своего рода админы или модераторы).
Вот команды с параметрами (аргументами) доставили проблем. Для примера решил реализовать вывод ботом случайного числа в формате по примеру:
вроде работает, но до тех пор, пока пользователь будет соблюдать формат команды. Да, я предусмотрел в обработчике команды, если юзер не введет аргументы вообще или введет, но явно не два или если диапазон неверно указан... Тут обработчик верно отрабатывает и указывает на ошибку пользователя. предлагая ему исправить. Но вот, если он введет вместо чисел - буквы и прочее, что явно не является числами, но скрипт сразу крашится, бот останавливается... и вываливается ошибка:
вот мой код:
0
|
||||||||||||||||
| 20.11.2022, 22:24 | |
|
Ответы с готовыми решениями:
18
Бот для telegram на Питоне Бот для дискорда на питоне Бот на питоне для Flash игры |
|
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
|
|
| 21.11.2022, 07:03 | |
|
А просто в try-except обернуть не подходит что ли?
2
|
|
|
0 / 0 / 0
Регистрация: 20.11.2022
Сообщений: 11
|
||||||
| 21.11.2022, 08:22 [ТС] | ||||||
|
Lekks, кстати да, вариант, как раз испробую в деле. Подсмотрел подобное в соседней похожей теме и тут ещё от вас этот же вариант. Однозначно попробую добавить этот метод. Спасибо.
Fudthhh, то что надо! сейчас протестирую код, благодарю. Пытался на регулярном выражении типа:
PS: после php немного непривычно с этим питоном, учит порядку и соблюдать синтаксис, в пхп часто пренебрегал этим =)
0
|
||||||
|
Модератор
|
|||||||||||
| 21.11.2022, 09:39 | |||||||||||
|
web-er, не прокатило так как условие не правильно поставлено (да и регулярки для сие дела, не очень подходят):
Правильно:
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 20.11.2022
Сообщений: 11
|
||||||
| 21.11.2022, 09:59 [ТС] | ||||||
|
Fudthhh, хорошо, попробую применить, а пока вот что получилось... Незнаю правда, правильно так делать или нет, но обработчик команды как бы отрабатывает и не дает ошибок и краша скрипта.
Вот что получилось:
0
|
||||||
|
Модератор
|
||||||||||||||||
| 21.11.2022, 10:26 | ||||||||||||||||
|
web-er, булевы переменные лучше сравнивать так (более читабельно):
Можно и так:
0
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 20.11.2022
Сообщений: 11
|
||||||
| 21.11.2022, 12:03 [ТС] | ||||||
|
Fudthhh, благодарю за примеры, теперь попробую все это "переварить"...
да, я ещё мыслю как ПХПист, потому и условный оператор сделал похожим на тот "привычный" метод... Добавлено через 59 минут Fudthhh, попробовал ваш метод, но сначала подумал я где то ошибся, бот просто молчит, решил вообще целиком взять ваш код и проверить (указав только переменную бота), но тоже молчит. Хотя не крашится...
0
|
||||||
|
0 / 0 / 0
Регистрация: 20.11.2022
Сообщений: 11
|
||||||
| 21.11.2022, 13:13 [ТС] | ||||||
|
Fudthhh, добавлял уже, все равно молчит...
0
|
||||||
|
0 / 0 / 0
Регистрация: 20.11.2022
Сообщений: 11
|
||||||
| 23.11.2022, 17:52 [ТС] | ||||||
|
Fudthhh, в принципе разобрался, удалил из кода эту часть:
0
|
||||||
|
17 / 17 / 6
Регистрация: 11.11.2015
Сообщений: 146
|
|
| 24.11.2022, 13:32 | |
|
Понимаю, что немного запоздал с подсказкой, но может пригодится на будущее - в Питоне есть ф-я isinstance(), гляньте на нее при случае
0
|
|
|
0 / 0 / 0
Регистрация: 20.11.2022
Сообщений: 11
|
|
| 24.11.2022, 13:43 [ТС] | |
|
vkiper, хорошо, гляну...
Сейчас я пытаюсь понять работу с функцией register_next_step_handler, т.е. интересует, как ей "сказать", что ждать можно ждать ответа от пользователя например 10 секунд, а потом, если пользователь так ничего и не ответил, произвести некие действия (поторопить его, сбросить диалог и т.д.). Пытался сразу после register_next_step_handler вставить функцию таймера, но проблема в том, что даже если юзер ответил, таймер все равно после этих 10 секунд срабатывает и отправляет в чат реплику бота, будто от пользователя не было ответа, хотя по факту он ответил вовремя. гугл не особо помог, пытаюсь "курить" маны, но пока безуспешно... PS: не хотелось бы по каждой проблеме плодить тут темы, потому, если позволят модераторы, продолжу вникать в рамках этой темы.
0
|
|
|
Модератор
|
|
| 24.11.2022, 14:03 | |
|
vkiper, очень полезная функция, особенно учесть что в сообщении 100% приходит строка.
web-er, таймер надо либо останавливать, либо после истечения времени проверять флаг, сделал пользователь то что нужно или нет.
0
|
|
|
0 / 0 / 0
Регистрация: 20.11.2022
Сообщений: 11
|
||||||
| 24.11.2022, 15:17 [ТС] | ||||||
|
Fudthhh, вот я пока пробую варианты, но ни один не помогает. Какой флаг или переменную проверять и где, когда скрипт в процессе ожидания ответа от пользователя... В целевой функции, я так понимаю нет смысла проверять, ведь она сработает лишь по факту ответа от пользователя и в ней уже есть свои обработчики проверок того, что ввел юзер. Получается, что будто бы ловить этот самый флаг надо где то между функцией команды, которая по итогу активировала register_next_step_handler и как бы обращения в следующую функцию пока нет, но она прописана в этом register_next_step_handler...
И теперь я курю маны и не понимаю, где ловить теперь ответ юзера, если в функции команды так понимаю, все переменные уже известны и в message по прежнему висит команда, которую написал юзер, вот ту и проблема, как поймать ответ юзера между этими двумя функциями... Короче я сам запутался, как новичку, который привык учиться на практических простых примерах, понять это очень сложно. Вот в общих чертах, как я пытался сделать, но таймер срабатывает даже тогда, когда юзер вовремя дал ответ.
Чтоб скрипт "помнил", что писал юзер и сравнивал изменения, на ум приходит только хранение данных в БД или в файле... Но по мне это костыль ещё тот...
0
|
||||||
|
Модератор
|
|
| 25.11.2022, 07:33 | |
|
web-er, значит стоит начать с основ если нет понимания как это реализовать.
Вкратце: 1) Юзер пишет команду, запускаем поток. 2) В потоке проверяем в бд состояние пользователя ответил ли он. 3) Если время истекло, выдаем сообщение, если пользователь ответил, закрываем поток. Во всех серверных приложениях, почти каждое действие храниться в бд, т. к. сервер в любое время может упасть и все данные будут потеряны.
0
|
|
|
0 / 0 / 0
Регистрация: 20.11.2022
Сообщений: 11
|
|
| 25.11.2022, 10:30 [ТС] | |
|
Fudthhh, ну я вот и пытаюсь эти основы понять, вот юзер написал команду и отправил её, скрипт бота активировал метод register_next_step_handler и ждет от пользователя действий (какого либо текста). Ведь целевая функция, которая читает ответ и выполняет действие я так понимаю пока не активна(молчит)... Юзер вводит текст и отправляет, целевая функция сразу даёт знать об этом и отвечает пользователю.
Теперь вот что получается, пока целевая функция не получила текст, а функция источник так скажем висит на register_next_step_handler и ждет текст... Вот тут нужно запустить некий цикл и отслеживать поток, как вы сказали. Т.е. по любому БД придется использовать, чтоб в неё записывать активность юзера(айди и прочее)? в качестве БД я так понимаю можно использовать и тестовой файл же? Собственно он получается будет в цикле "прослушки" действий юзера и перезаписываться, если данные обновились? В этом случае, завершить цикл перезаписи БД и послать в таймер флаг стоп и дальше уже отвечает целевая функция? Правильно я понимаю порядок работы метода отлова данные пользователя? Данные так же ловить из message массива?
0
|
|
|
Модератор
|
|
| 28.11.2022, 07:34 | |
|
web-er, не нужно использовать register_next_step_handler, по факту обрабатываются все команды, просто проверяются должны они что то выполнить или нет, я не использовал эту функцию в проектах, т. к. ее применение очень узконаправленное. В aiogram, есть конечные автоматы(FSMContext) (которые как раз замещают костыли, для внесения многих данных в базу данных, т. к. при правильной настройке это все делается автоматически).
0
|
|
|
0 / 0 / 0
Регистрация: 20.11.2022
Сообщений: 11
|
||||||
| 28.11.2022, 16:24 [ТС] | ||||||
|
Fudthhh, хорошо. учту, aiogram погляжу...
Ну а пока набросал в процессе изучения "манов" и ваших подсказок бота, который более менее работает. 1. Выводит случайные числа в указанном диапазоне и количестве (опционально) 2. Выводит случайные элемента из списка в указанном количестве 3. Ну и что то вроде админки, где бот отвечает только тем, кто в списке этих самых админов (их айди в телеграм). Сейчас выводит для таковых только debug_info, чтоб видеть массив переменных для работы с данными пользователей. Убрал из основного скрипта часть данных в отдельные файлы (данные конфига бота и его ответы) Так что теперь скрипт выглядит более аккуратно и нет теперь необходимости постоянно подтирать токен и т.д., если придется код выкладывать на форуме для поиска решений. Что скажете? Норм или ещё что-то стоит подработать в нём?
0
|
||||||
| 28.11.2022, 16:24 | |
|
Помогаю со студенческими работами здесь
19
Бот для Телеграмм, использование клавиатур и команд Бот discord.py Проблема с обработкой(Обновлением) таблицы в async методе, sqllite3 Бот в телеграмм на Питоне Бот в телеграмм на Питоне Vk api бот на питоне Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|