|
0 / 0 / 0
Регистрация: 20.11.2022
Сообщений: 11
|
||||||||||||||||
Telegram Bot Бот на питоне для телеги - проблемы с обработкой команд20.11.2022, 22:24. Показов 1989. Ответов 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 бот на питоне Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи
и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|