Задать вопрос
Ответы пользователя по тегу Telegram
  • Как сделать рассылку в телеграмм незнакомым пользователям?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    С помощью клиентского API технически возможно. Но лучше не надо. Телеграм за такое очень быстро заблокирует.

    Надо просто приучить себя к мысли, что Телеграм - это не канал рассылки и никогда им не будет. Телеграм - это мессенджер. Он предполагает, что пользователь сам должен проявить инициативу для начала какого-то взаимодействия, а не ему это взаимодействие подсунули без спросу (проще говоря, спам). Если нужно получить контакт с пользователем, то это надо делать иначе. Публиковать контакты на сайте, в своих публичных каналах в Телеграме (пользователь может найти их по своей инициативе). Сообщать через другие ранее верифицированные каналы (например, по адресу электронной почты или в смс-сообщении), для которых пользователь уже дал согласие на получение информации.
    Ответ написан
    Комментировать
  • Как исправить Message to delete not found?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Тут делается reply, а затем через 30 секунд удаление этого сообщения. Если нажать кнопку удаления, то сообщение будет удалено, но удаление через 30 секунд всё равно будет вызвано и приведёт к ошибке, ведь сообщения и правда уже нет.
    Ответ написан
  • Можно ли общаться с телеграм ботом в канале, но так чтобы этого не было видно остальным?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нельзя, никак. Канал по определению нужен для того, что его содержание видели все подписчики (и вообще все пользователи, если это публичный канал). Вот специально для таких задач в Телеграме появилась возможность ботам писать подписчикам канала даже без /start.
    Ответ написан
    Комментировать
  • Как создать многопользовательского бота в Telegram на Python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ошибка в том, что бот сохраняет в одних и тех же переменных данные разных пользователей.

    Решение этой задачи называется FSM (Finite State Machine - конечный автомат) и в указанной библиотеке есть простая реализация FSM на основе метода register_next_step_handler. Пример.
    Ответ написан
    2 комментария
  • Как исправить ошибку в написании Telegram-бота - python (aiogram)?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    И не будет реагировать. Ведь в момент выполнения этого кода message.text == '/game1'.

    Ищи примеры по ключевым словам FSM aiogram.
    Ответ написан
    Комментировать
  • Можно ли получить телеграм id по номеру телефона?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Да, потенциально клиентский API Телеграма открыт и позволяет сделать поиск по номеру телефона. Но надо понимать, что пользователь может запретить настройками находить себя по номеру телефона. Также надо понимать, что при сколько-нибудь массовом поиске по номеру телефона Телеграм отреагирует и заблокирует.

    Рекомендую отказаться от этой затеи.
    Ответ написан
    2 комментария
  • У всех одинаковое кол - во рефералов, что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Проблема здесь:

    cur.execute('UPDATE users SET refferals = ?', str(refs))


    Это стандартная ошибка update without where. При таком запросе UPDATE изменяет все строки таблицы на одно и то же значение. Нужно изменять с фильтром WHERE конкретную запись.
    Ответ написан
    Комментировать
  • Как поймать юзер-бота телеграм?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В общем случае это проблематично. Но если совсем-совсем не жалко пользователей, то можно сделать так: удалить половину, запостить какую-нить хрень, посмотреть была ли утечка хрени. Если была - юзербот в этой половине, не была - в другой половине. Дальше возвращаем удалённых пользователей обратно и убираем только половину группы с юзерботом... в общем, бинарным поиском.

    Бедные пользователи...
    Ответ написан
  • Бот проверки подписки в телеграм работает не корректно, как исправить?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Бот всё делает так, как написано. А написано проверить, что проверяем, что пользователь по очереди creator/administrator/member и если нет - то ругаемся. Соответственно, если пользователь подписан, то два раза ругнётся и один раз поздравит (в соответствии с тем, какой у него статус, это будет 1/2/3 сообщение в цепочке).

    Надо выкинуть цикл for stat in status вообще. Получить статус пользователя один раз и проверить его:

    status = bot.get_chat_member(chat_id = '-1001670595457', user_id = message.from_user.id).status
    if status in ['creator, administrator', 'member']:
        ...
    Ответ написан
    2 комментария
  • Как вывести массив одним сообщением чтобы значение было с новой строчке?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ну если в цикле делать message.answer по числу элементов в market_name, то сколько ответов напишет бездушный бот? Надо сообщение собрать в одну переменную и затем отправить за один раз. И два цикла тут вообще не к месту, всё можно в одном делать:

    answer_message_text = ""
    for tickers in data2['tickers']:
        answer_message_text += f"{tickers['market']['name']} - {tickers['trade_url']}\n")
        # а надо ли ещё какие-то массивы использовать?
        #market_name.append(tickers['market']['name'])
        #market_link.append(tickers['trade_url'])
    await message.answer(answer_message_text)
    Ответ написан
  • Как убрать ошибку в TeleBot?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Так проверяй, что message.text cостоит из цифр (например, методом isdigit). Или лови исключение ValueError.
    Ответ написан
    Комментировать
  • Как сделать минимального бота?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Берём простейший эхобот на %любимый_язык_программирования% и чуть-чуть подправляем текст ответного сообщения под свои требования.

    Если %любимого_языка_программирования% нет, как и вообще навыков программирования, то обращаемся на фриланс.
    Ответ написан
    Комментировать
  • Пишу код для Telegram Бота, как не делать тупые ошибки?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Сначала надо изучить язык программирования, потом освоить нужную библиотеку и уже тогда писать бота. А то это как выехать на трассу, купив водительсике права, но не изучив азы вождения.
    Ответ написан
    Комментировать
  • Как заставить телеграм бота работать через аккаунт пользователя от имени пользователя?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Да, это возможно, но придётся вместо Bot API использовать клиентский API (с протоколом MTProto). Тут наиболее распространены библиотека telethon для Python и официальная библиотека tdlib.
    Ответ написан
    Комментировать
  • Как получить id всех участников группы в тг?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В Telegram Bot API нельзя получить список участников группы, только общее количество getChatMemberCount, список администраторов getChatAdministrators и информацию о конкретном участнике чата по заранее известному id пользователя getChatMember. Именно поэтому вагоны примеров в поисковиках в основном используют библиотеку telethon.
    Ответ написан
    Комментировать
  • Как в telebot отправить сообщение в виде таблицы?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Очевидно, что если в цикле вызывать send_message, то будет отправлено столько сообщений, сколько итераций цикла. Надо собрать сообщение в одну переменную и затем одной операцией send_message его отправить. Примерно так:

    message_text = ""
    for res in cursor.fetchall():
        message_text += "{0} {1}".format(res[0], res[1]))
    bot.send_message(..., message_text)
    Ответ написан
  • Как узнать апи пользователя который отправил сообщение телеграмм боту?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никак, бот не может узнать IP пользователя.
    Ответ написан
  • Как отправить сообщение от телеграм-бота на python определенным пользователям, при запросе от создателя?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Для начала, id - это число. Зачем хранить их в виде строк?

    Далее, при отправке from_user.id сравнивается также со строкой. Конечно же, равенство строки и числа невозможно.

    И, наконец, отправка должна идти по числовому id.

    Надеюсь, все адмиины из массива нажали /start у бота? Без этого им сообщения отправлять будет нельзя.
    Ответ написан
    7 комментариев
  • Как удалить кнопку из клавиатуры telebot?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нельзя удалить одну кнопку. Можно либо удалить всю клавиатуру целиком, либо отправить другую клавиатуру на замену. Соответственно, для удаления всего одной кнопки нужно помнить, какую клавиатуру отправлял в прошлый раз (хранить это явным образом или определять из контекста), чтобы отправить новую клавиатуру без этой кнопки.
    Ответ написан
    Комментировать
  • Как вызывать команды внутри машины состояний aiogram?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Лучше всего, конечно, выносить общую часть функционала в отдельную функцию. Например, пусть в обработчике /start информация о пользователе добавляется в базу и отправляется приветственное сообщение с какой-нибудь справкой по использованию. Скорее всего, повторно добавлять в базу не надо, а вот приветственное сообщение можно и выделить в какую-нибудь send_welcome_message (естественно, с параметром chat_id и при необходимости другими параметрами, нужными для её работы). Типа, пользователь запустил бота, поотвечал на вопросы, потом получил опять приветственное сообщение с информацией о своей работе, которую пользователь уже успел забыть, пока заполнял анкету.

    Но если прям очень хочется, то можно вызвать функцию напрямую. Но если она обёрнута декоратором, то её вызвать напрямую может быть опасно, так как после применения декоратора это будет уже другая функция, которая имеет право создавать какие-нибудь спецэффекты при своём запуске. Если регистрировать без декораторов, вызовами register_message_handler, то исходная функция изменяться не будет, но с декораторами можно писать более красиво.
    Ответ написан
    Комментировать