Задать вопрос
  • Почему не срабатывает обработчик @for_user_router.message(F.successful_payment) успешного платежа SuccessfulPayment через Telegram API?

    mihailgok
    @mihailgok
    Фронтенд-разработчик, филантроп
    Попробуйте не через router а через dispatcher

    dp = Dispatcher()
    ....
    @dp.message(F.successful_payment)
    async def star_payment(msg: Message, bot: Bot):
    Ответ написан
    Комментировать
  • Как создать телеграм бота, который принимает в канал только при наличии подписки на другой канал?

    saboteur_kiev
    @saboteur_kiev Куратор тега Python
    software engineer
    не знаю что такое подписка. Можете просто проверять есть ли юзер в определенном чате, и тогда в другом чате подтверждать его реквест.
    Документация по бот апи тут:
    https://core.telegram.org/bots/api#getchatmember
    https://core.telegram.org/bots/api#approvechatjoin...
    Ответ написан
    2 комментария
  • Бот отправляет 2 раза сообщение, которое не нужно отправлять в данный момент + не хочет отправлять результаты в группу, Как решить эти 2 проблемы?

    Vindicar
    @Vindicar
    RTFM!
    return (test_g, test_k)
    bot.send_message(айди группы, f'@{message.from_user.username} / {message.from_user.id} отправил тест на проверку\nЕго варианты были\nhttps://forms.gle/{test(message)[0]}\nhttps://forms.gle/{test(message)[1]}')


    Полнейшая чушь.

    Во-первых, запомни, что обработчики событий (всё, что декорировано message_handler() или подобным) не следует вызывать самостоятельно. Вот просто не следует. Их вызывает бот по мере надобности. Как следствие, возвращать из них тоже ничего не следует - бот это проигнорирует, а ты эти значения не получишь.

    Во-вторых, выучи концепцию побочных эффектов при вызове функции и держи её в голове. Ты на ровном месте делаешь два вызова test(), которая имеет побочные эффекты в виде отправки сообщения, а потом удивляешься, что два раза отправляются сообщения! Причем именно что на ровном месте. Вот тебе что, грозят болтающееся отрезать за сохранение результата test() в ещё одну локальную переменную перед использованием этого результа? Конечно, это непринципиально, потому что test() вызывать нельзя (см. пункт 1), но всё равно показательно.

    А что касается передачи инфы о действиях пользователя - заведи хранилище вида "id пользователя - пара ссылок". Подойдёт даже словарь, если тебе не нужно, чтобы инфа переживала перезапуск бота. И вот оттуда уже в well() вытаскивай инфу о том, что проходил текущий пользователь.

    Учись программировать, потом пиши ботов. Не наоборот.
    Ответ написан
    Комментировать
  • Потеря связи в боте telebot, в чем могут быть проблемы?

    @Everything_is_bad
    но когда перевел бота на домашний сервер
    это одна из возможных причин, качество обычной техники и домашнего интернета очень плохое.

    remote end closed connection without response
    а это вторая, причиной этого может быть превышение лимита запросов на сторонний сервис, а может просто проблемы с сетью, как следствие первой причины

    Надо делать правильно, нормальный хостинг и webhook.
    Ответ написан
    Комментировать
  • Как настроить авторизацию в telegram боте?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Идея? Есть отличная оригинальная идея - немножко подучиться программировать на выбранном вами языке. Не искать карьеру разработчика ботов беззнания программирования, а именно подучить язык и основы алгоритмизации.
    А задача ваша решается просто. Начать надо с декомпозиции.
    При запуске бота вам нужно открыть этот текстовый файл и загрузить его контент в структуру, и, если не получилось, то создать пустую структуру.
    Если пользователь, нажавший у бота кнопку старт не найден в этой структуре, то бот должен запустить сценарий регистрации. Что вы под этим понимаете? Вопросы какие-то задать пользователю и сохранить ответы?
    При окончании регистрации нужно сохранить структуру в файл.

    С каким именно пунктом вам что-то не ясно?
    Если со всеми, то нужно учиться программировать,а ботов писать вам рано. Попробуйте взять учебник и читать по порядку. первый раз быстро и не останавливаясь, а второй раз вдумчиво и выполняя все задания.

    После этого у вас вот эти вот вопросы отпадут все.
    Ответ написан
    Комментировать
  • Почему не срабатывает if? как это пофиксить?

    Vindicar
    @Vindicar
    RTFM!
    Учи основы работы с файлами в питоне и включай голову.
    Чтение и запись в файл производится по т.н. текущей позиции. При открытии файла текущая позиция стоит в начале файла, а при чтении/записи она смещается на длину прочитанного/записанного.
    А теперь смотри что ты делаешь. У тебя есть вызов fr = f.readlines(). Он построчно прочитает всё содержимое файла в список, и сохранит список в переменную fr. При этом текущая позиция окажется в конце файла - ты же прочитал всё содержимое.
    Как следствие, все дальнейшие вызовы read() и readlines() не смогут прочитать НИЧЕГО - ты уже в конце файла, дальше ничего нет. Они будут возвращать пустую строку или пустой список - а ты этого явно не ожидаешь.
    Раз уж ты читаешь весь файл в fr - то и дальше работай не с файлом, а со списком fr. Ну и проверка на chat_id у тебя кривая - что, если так совпадёт, что твой chat_id будет содержаться внутри второго значения (токен)? Такое может произойти, хоть это и маловероятно.

    Я бы посоветовал не выпендриваться со своим форматом данных в текстовике, а использовать модуль json. Он гораздо удобнее для хранения структурированной информации. А если указать правильные параметры при записи в файл, то полученный файл будет более-менее человеко-читаемым.
    Ответ написан
    2 комментария
  • Пишу телеграм бота на пайтон и вылезает ошибка KeyError: 'recipes'. Как решить?

    @Everything_is_bad
    сначала учим основы python, только потом пишем ботов
    Ответ написан
    Комментировать
  • Как исправить мой код 1С: Предприятие нахождение максимального элемента в табличной части чтоб он не выдавал ошибку?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Ужас какой.
    Если по вашему коду тогда так :
    Выборка=Справочники.Варианты_головных_уборов.Выбрать(); 
    Пока Выборка.Следующий() Цикл
    	Макс2=0;
    		Для каждого а из Выборка.ТабличнаяЧасть1 Цикл
    			Если Макс2>а.Количество_материалов тогда
    				Макс2=а.Количество_материалов;
    			КонецЕсли;        		
    		КонецЦикла; 
    			Сообщить(макс2.Количество_материалов);
    КонецЦикла;

    А вообще это запросом делается конечно.
    Запрос = Новый Запрос("Выбрать Первые 1 
    		|т.Ссылка как ВариантГоловногоУбора,
    		|Максимум(т.Количество_материалов) как МаксимальноеКоличествоМатериалов
    		|Из Справочник.Варианты_головных_уборов.ТабличнаяЧасть1 как т
    		|Сгруппировать по т.Ссылка
    		|Упорядочить по МаксимальноеКоличествоМатериалов Убыв");
    	РезультатВыборка = Запрос.Выполнить().Выбрать();
    	Если РезультатВыборка.Следующий() Тогда
    		Сообщить("Вариант:"+РезультатВыборка.ВариантГоловногоУбора+", Количество материалов:"+РезультатВыборка.МаксимальноеКоличествоМатериалов); 
    	КонецЕсли;
    Ответ написан
    Комментировать
  • Как пофиксить telebot не отправляет сообщение?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Потому что current_time нигде не меняется в цикле, например. Но тут не весь код, причин ещё может быть даже кроме этой миллион. А эта причина точно делает этот код бесполезным полностью.
    Ответ написан
    3 комментария
  • Не могу понять, как использовать переменную за пределами функции main?

    @Everything_is_bad
    как мне использовать переменную alerts_client за пределами функции main?
    определить эту переменную за пределами функции main
    Ответ написан
    Комментировать
  • Как в VSCode отключить это?

    @mezhuev
    Системный администратор
    Просто щёлкните по «don't show» и подсказка не будет появляться. Или откройте параметры (Ctrl+,) и в поиске введите workbench.editor.empty.hint.
    Ответ написан
    3 комментария
  • Почему row[0] обращается к None объекту?

    @Everything_is_bad
    Почему row[0] обращается к None объекту?
    Потому что в row None. А почему в row None? Потому что None вернул sql запрос. Элементарная же логика
    Ответ написан
    5 комментариев
  • Как вывести информацию из списка и кортежа?

    Rimush
    @Rimush
    Ходят легенды о некогда известном, но сейчас уже утраченном знании.
    Имя тому знанию "Циклы":
    ppls = [('user1', 73), ('user2', 43), ('user3', 39), ('user4', 37), ('user5', 27),
            ('user6', 22), ('user7', 11), ('user8', 10), ('user9', 10), ('user10', 9)]
    
    string = 'ТОП 10 ИГРОКОВ:\n'
    for ppl in ppls:
        string += f'{ppl[0]} - {ppl[1]}\n'
    
    print(string)
    Ответ написан
    Комментировать
  • Как поменять for i in range на while?

    Vindicar
    @Vindicar
    RTFM!
    Изменяй. Разрешаю.

    Если серьёзно, то учебные задачи надо решать самостоятельно, иначе какой смысл браться?
    Но тут достаточно понимать, что делает for i in range(x): ...
    Это близкий эквивалент такого кода:
    i = 0
    while i < x:
        ...  # тут тело цикла for
        i += 1

    Ответ написан
    Комментировать
  • Код не работает дальше списка городов, что делать?

    @sttreng
    у вас написан хендлер на обычные кнопки, хендлер на инлайн кнопки выглядит так
    @bot.callback_query_handler(text=['city1'])
    советую сделать универсальный хендлер и обрабатывать колбеки через startswith
    например у вас будут кнопки с колбеками city_1, city_2 и тд.
    будет такой хендлер
    @bot.callback_query_handler(Text(startswith='city_'))

    потом через strip делите колбеку дату и смотрите какой город
    Ответ написан
    3 комментария
  • Как создать свой xml формат?

    Vindicar
    @Vindicar
    RTFM!
    1. Написать класс-реестр, который по имени тега определяет класс компонента.
    2. Написать базовый класс компонента, который умеет читать своё XML описание, выделять из него прописанные атрибуты (типа цвета, текста и т.д.), а также находить и создавать вложенные компоненты, если они есть. Для определения, какой класс нужно использовать для создания компонента, и нужен реестр.
    3. Отнаследовать от базового класса классы для поддерживаемых тобой компонентов. Они должны брать свои атрибуты (которые выделил базовый класс), а потом создавать и настраивать соответствующий элемент управления. Также они должны предоставлять способ подписаться на события, на которые ты хочешь реагировать, типа изменения поля ввода, клика по кнопке и т.д. И, разумеется, они должны быть прописаны в реестре компонентов, чтобы их можно было вкладывать друг в друга.

    Работы вагон, а толку будет немного, но для тренировки можно попробовать.
    Ответ написан
    Комментировать
  • Как начать свой путь в области искусственного интеллекта с использованием языка программирования Python?

    Steel_Balls
    @Steel_Balls
    Python тут ни при чём.
    Твой вопрос звучит так: "Как построить дом с использованием молотка?"
    "Как стать хирургом с использованием скальпеля?"
    Ответ написан
    Комментировать
  • Как начать свой путь в области искусственного интеллекта с использованием языка программирования Python?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Математика.
    Ответ написан
    Комментировать
  • С чего начать изучение информационной безопасностью и что вообще делает инфобес?

    @Everything_is_bad
    Надо сначала определить, что именно ты хочешь-то или какая именно задача была кем-то поставлена, откуда-то же внезапно появилась хотелка и какие-то сроки.

    Мечта: буду искать уязвимости
    Реальность: в очередной раз никому не нужные отчеты в docx и xlsx.
    Ответ написан
    5 комментариев
  • Как в телеграмм-боте запустить сразу две функции, работающие с API, одновременно?

    febday
    @febday
    Очень странная логика. Но если вы объясните мне её, то я постараюсь понять

    А не работает у вас ничего, потому что поллинг сам по себе и есть запрос к методу getUpdates, вот только при удачном ответе от сервера полинг говорит API, что он прочитал эти апдейты и больше они ему не нужны. Я не могу в любом случае понять вашу логику, она очень странная
    Ответ написан
    1 комментарий