Вполне нормальная практика перед оплатой показывать короткую страничку в стиле "оплатить через приложение" или "оплатить через сайт". Тогда если один вариант не сработает, пользователь пойдёт через другой.
Можно использовать data url и содержимое картинки кодировать в base64, вставляя в страницу. Но это плохой путь. Правильно класть в файловую систему и в шаблон вставлять ссылку на картинку.
Docik99, чтобы порт не менялся, нужно подключиться к интернету мимо роутера и иметь внешний IP (можно динамический). Иначе роутер в любом случае будет подменять IP на свой, а локальный порт транслировать по таблице conntrack из определённого диапазона (это необходимо, так как одинаковый порт может встретиться у разных клиентов данного маршрутизатора).
Для чего всё это затевается? Даже при внешнем IP локальный порт автоматически выбирается из портов 1024+ или даже 50000+. Наоборот, исходящий пакет от 21 порта будет подозрительно выглядеть.
utsiye, потому что нельзя просто так использовать asyncio и треды одновременно. Либо использовать asyncio только в одном потоке, либо в каждом потоке исхитриться и запустить свой отдельный event loop. Но чаще всего надо просто пересмотреть задачу и обойтись псевдопараллельностью самого asyncio.
capybara123, надо с большим уважением относиться к людям, которые помогают тебе бесплатно в своё свободное время.
А задача решается, например, использованием словаря, где id пользователя выступает в качестве ключа. Хотя в большинстве случаев намного лучше использовать register_next_step_handler (в telebot есть официальный пример в файле step_example.py с демонстрацией принципов его работы).
Александр Тищенко, любой инструмент может быть лучше или хуже только применительно к конкретным условиям и требованиям. Например, для сегмента недорогих решений, где нет постоянного сотрудника на зарплате, который это разрабатывает и поддерживает, нужна популярная и эффективная база, в которой при необходимости за пять минут разберётся любой фрилансер. И тут MySQL несомненно абсолютный лидер.
Это задание, а не вопрос. Задания выполняют, например, на фриланс-биржах. За соответствующую плату.
И не надо лепить уровень "сложный" на всё, что сложно для тебя. Потому что задача тривиальная, на чтение документации и элементарные навыки программирования.
Phantom_Rocker, что дописать и зачем? Не надо дописывать что попало, надо чётко понимать, что делает алгоритм, и вносить изменения тогда, когда его поведение нужно изменить.
Вот, например, что такое for id , names_codes[1] in? Явно же бред. Так что идём и читаем учебник, чтобы понимать, как это работает. Чтобы бредовость стала понятна самому. Нельзя вечно просить, чтобы за тебя кто-то другой программировал.
Решение одно - повторно залогиниться. Мистики не бывает, если авторизация в WA потеряна, то её невозможно восстановить вообще никак иначе, кроме как авторизоваться заново.
AUser0, я вижу ошибку в коде у автора вопроса. И я объясняю, что надо было сказать автору вопроса. Не просто кусок кода шлёпнуть, а объяснить, в чём состоит проблема и как её решать. Тем более не нужно кусок кода из интернета.