Ответы пользователя по тегу Telegram
  • Как реализовать выбор городов в боте Телеграм?

    deepblack
    @deepblack Куратор тега Python
    Чтоб при введении первых букв предлагались варианты городов (как на сайте)

    Прямо как на сайте это не получится сделать. Но только если переписать клиентское приложение.

    Суть в том, что чтобы бот получил от пользователя ввод, нужно отправить сообщение. Иначе это не будет работать.
    А это уже не как на сайте.
    Ответ написан
    Комментировать
  • Не работает телеграм бот на python?

    deepblack
    @deepblack Куратор тега Python
    @bot.message_handler(content_types=["text"])
    def text(message):
        if message.text == 'hello':
            bot.send_message(message.chat.id, 'И тебе hello')
        if message.text == 'photo':
            file = open('"C:/photo.png"', 'rb')
            bot.send_photo(message.chat.id, file)
    Ответ написан
    Комментировать
  • Программа считывающая информацию с тега на "закрытом" сайте авторизацию. Как это осуществить?

    deepblack
    @deepblack Куратор тега Python
    • 1.1 Пишешь парсер сайта, с авторизацией.
    • 1.2 Парсишь сайт (Запускаешь парсер два раза в день)
    • 1.3 Результат парсинга кладешь в БД.

    • 2.1 Пишешь Telegram бота который по запросу пользователя отправляет данные из БД.

    • 3.1 Profit.

    Тут еще есть куда декомпозировать задачу.
    Но твой вопрос похож на: "напишите код за меня", так что пробуй и задавай конкретные вопросы.
    Ответ написан
    2 комментария
  • Как автоматически читать сообщения в телеге?

    deepblack
    @deepblack Куратор тега Python
    Хочется автоматически читать каналы в телеге со второго аккаунту и пересылать их сообщением на первый, такое возможно?

    Возможно.

    Допустим через Telethon
    Ответ написан
    Комментировать
  • Python: [SSL: CERTIFICATE_VERIFY_FAILED]?

    deepblack
    @deepblack Куратор тега Python
    Как отключить проверку SSL в телеграмм боте?

    Зачем?

    Если у тебя бот с вебхуками поставь сертификат от Let’s Encrypt.

    UPD:
    Ок, longpoll
    Если запускаешь на компе в РФ, то учитывай блокировки Telegram.
    Через VPN работает.
    Ответ написан
    8 комментариев
  • Как получить файл через Telegram Api?

    deepblack
    @deepblack Куратор тега Python
    spoiler
    у меня есть бот в telegram для скачивания данных с virustotal

    как можно реализовать следуюшее : Я в программе пишу /download "ссылка" после чего она идет боту в telegram . Далее у меня скачивается "файл" который отправил данный бот .


    Это типа есть бот который нихрена не может, как добавить данную функциональность или что это?

    Не понятно что именно уже реализовано, а что нужно реализовать?


    UPD:
    У меня есть данный бот и иммеет эту функцию . Просто я хочу зделать что бы можно было через программу это все делать не включая телегу.


    • Использовать Telethon и отсылать сообщения боту через него и так-же получать файлы в ответ
    • Добавить боту API по которому из "программы" отсылать ссылку на файл и в ответ получать его (файл).


    UPD2:
    Можно по точнее?


    отправить файл средствами Telebot смотри тут
    tb.send_document(chat_id, "FILEID")

    как скачать файл средствами Python легко гуглится (и не является ответом на поставленный вопрос)
    Ну или вот пример, средствами Telebot (отправка и получение):
    spoiler
    import telebot
    
    TOKEN = 'YOUR BOT TOKEN'
    CHAT_ID = 'YOUR CHAT ID'
    
    bot = telebot.TeleBot(TOKEN)
    
    ret_msg = bot.send_voice(CHAT_ID, open('tests/test_data/record.ogg', 'rb'))
    
    file_info = bot.get_file(ret_msg.voice.file_id)
    
    downloaded_file = bot.download_file(file_info.file_path)
    
    with open('new_file.ogg', 'wb') as new_file:
        new_file.write(downloaded_file)


    Если ты ничего из этого не понял, то либо нужно начать с учебника по Python либо программирование это не твоё. И вопросы тут желательно задавать более подробные. а не скиньте готовый код.
    Ответ написан
    2 комментария
  • Как удалить сообщение из канала в телеграмм с помощью бота написанного на Python?

    deepblack
    @deepblack Куратор тега Python
    bot.delete_message(chat_id=message.chat_id,
                       message_id=message.message_id,
                       *args,
                       **kwargs)


    Documentation
    Ответ написан
  • Как сделать так чтобы телеграм бот выводил информацию о сервере?

    deepblack
    @deepblack Куратор тега Python
    • Очевидно что код который отвечает за получение инфы с игрового сервера вынести в соответствующий обработчик. Чтобы он выполнялся каждый раз при отправке соответствующей команды.

    • В идеале организовать кеширование этой инфы допустип на минуту, чтобы не дергать сервер лишними запросами. Хотя я сомневаюсь что у тебя там большая нагрузка.
    Ответ написан
  • Как можно обновлять текст сообщения?

    deepblack
    @deepblack Куратор тега Python
    Посмотри как это сделано сдесь:
    spoiler
    import os
    import logging
    from pathlib import Path
    from functools import wraps
    from dotenv import load_dotenv
    from utils import Video, BadLink
    from telegram import InlineKeyboardMarkup, ChatAction
    from telegram.ext import Updater, CallbackQueryHandler, MessageHandler, Filters
    
    env_path = Path('.') / '.env'
    load_dotenv(dotenv_path=env_path)
    
    
    def send_action(action):
    
        def decorator(func):
            @wraps(func)
            def command_func(update, context, *args, **kwargs):
                context.bot.send_chat_action(chat_id=update.effective_message.chat_id, action=action)
                return func(update, context, *args, **kwargs)
    
            return command_func
    
        return decorator
    
    
    send_typing_action = send_action(ChatAction.TYPING)
    
    
    logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
    logger = logging.getLogger(__name__)
    
    
    @send_typing_action
    def get_format(update, context):
        logger.info("from {}: {}".format(update.message.chat_id, update.message.text))
    
        try:
            video = Video(update.message.text, init_keyboard=True)
        except BadLink:
            update.message.reply_text("Your link is not valid")
        else:
            reply_markup = InlineKeyboardMarkup(video.keyboard)
            update.message.reply_text('Choose format:', reply_markup=reply_markup)
    
    
    @send_typing_action
    def download_desired_format(update, context):
        query = update.callback_query
        resolution_code, link, merge_formats = query.data.split(' ', 2)
        print('chat_id: ', query.message.chat_id)
        print('Merge formats: ', merge_formats)
        
        query.edit_message_text(text="Downloading")
        
        video = Video(link)
        video.download(resolution_code, merge_formats)
        
        with video.send() as files:
            for f in files:
                context.bot.send_document(chat_id=query.message.chat_id, document=open(f, 'rb'))
    
    
    updater = Updater(token=os.getenv("TG_BOT_TOKEN"), use_context=True)
    
    updater.dispatcher.add_handler(MessageHandler(Filters.text, get_format))
    updater.dispatcher.add_handler(CallbackQueryHandler(download_desired_format))
    
    
    updater.start_polling()
    updater.idle()
    Ответ написан
    Комментировать
  • Как создать кнопку telegram?

    deepblack
    @deepblack Куратор тега Python
    Пример под спойлером
    spoiler
    import logging
    
    from telegram import InlineKeyboardButton, InlineKeyboardMarkup
    from telegram.ext import Updater, CommandHandler, CallbackQueryHandler
    
    logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
                        level=logging.INFO)
    logger = logging.getLogger(__name__)
    
    
    def start(update, context):
        keyboard = [[InlineKeyboardButton("Option 1", callback_data='1'),
                     InlineKeyboardButton("Option 2", callback_data='2')],
    
                    [InlineKeyboardButton("Option 3", callback_data='3')]]
    
        reply_markup = InlineKeyboardMarkup(keyboard)
    
        update.message.reply_text('Please choose:', reply_markup=reply_markup)
    
    
    def button(update, context):
        query = update.callback_query
    
        query.edit_message_text(text="Selected option: {}".format(query.data))
    
    
    def help(update, context):
        update.message.reply_text("Use /start to test this bot.")
    
    
    def error(update, context):
        """Log Errors caused by Updates."""
        logger.warning('Update "%s" caused error "%s"', update, context.error)
    
    
    def main():
        # Create the Updater and pass it your bot's token.
        # Make sure to set use_context=True to use the new context based callbacks
        # Post version 12 this will no longer be necessary
        updater = Updater("TOKEN", use_context=True)
    
        updater.dispatcher.add_handler(CommandHandler('start', start))
        updater.dispatcher.add_handler(CallbackQueryHandler(button))
        updater.dispatcher.add_handler(CommandHandler('help', help))
        updater.dispatcher.add_error_handler(error)
    
        # Start the Bot
        updater.start_polling()
    
        # Run the bot until the user presses Ctrl-C or the process receives SIGINT,
        # SIGTERM or SIGABRT
        updater.idle()
    
    
    if __name__ == '__main__':
        main()


    Я документации не понимать

    По английски читать не умеешь, что-ли?
    Ответ написан
  • Где можно взять список всех-всех открытых групп в Telegram?

    deepblack
    @deepblack
    1. Покупаете Telegram с потрохами и сразу получаете полный доступ. Если денег хватит и договориться сможете.
    2. Парсите все открытые источники, на предмет ссылок на группы. Но есть большая вероятность, что таким способом можно многое пропустить.
    Ответ написан
    1 комментарий
  • Как передать данные из хвоста ссылки на сервер?

    deepblack
    @deepblack
    Но как мне отловить данные "start"?


    https://core.telegram.org/bots#deep-linking
    Deep linking
    Telegram bots have a deep linking mechanism, that allows for passing additional parameters to the bot on startup. It could be a command that launches the bot — or an auth token to connect the user's Telegram account to their account on some external service.

    Each bot has a link that opens a conversation with it in Telegram — https://telegram.me/. You can add the parameters start or startgroup to this link, with values up to 64 characters long. For example:

    https://telegram.me/triviabot?startgroup=test


    Далее посмотреть в примерах:
    deep_linking.py

    Пример на python, но думаю вы разберётесь.

    подсказка

    Вам надо обрабатывать хэндлер /start.


    Telegram отдает данные через WebHook, но в json ответе нет нужных данных.

    Вы бы показали как пытаетесь это сделать.
    Ответ написан
    2 комментария
  • Номер телефона, как ссылка в telegram bot?

    deepblack
    @deepblack Куратор тега Python
    spoiler
    https://stackoverflow.com/questions/40590683/how-t...
    bot.send_message(
        chat_id,
        "Example text with a phone [+79991234567](tel:+79991234567)", 
        parse_mode='Markdown'
    )


    Сообщение должно быть < 200 символов, номер как ссылка только на мобильном устройстве.

    upd:

    Это работает

    Номер отправляю простым текстом5d47fef5ba3ba100526303.jpeg
    Ответ написан
    2 комментария
  • Как реализовать реферальную систему в Telegram боте?

    deepblack
    @deepblack Куратор тега Python
    Как реализовать реферальную систему в Telegram боте?

    Тут хотелось увидеть в чём возникла сложность? Снова прийдется гадать.

    Внимательно документацию почитать для начала.
    https://core.telegram.org/bots#deep-linking
    Deep linking
    Telegram bots have a deep linking mechanism, that allows for passing additional parameters to the bot on startup. It could be a command that launches the bot — or an auth token to connect the user's Telegram account to their account on some external service.

    Each bot has a link that opens a conversation with it in Telegram — https://telegram.me/. You can add the parameters start or startgroup to this link, with values up to 64 characters long. For example:

    https://telegram.me/triviabot?startgroup=test


    Далее посмотреть в примерах:
    deep_linking.py
    Ответ написан
    2 комментария
  • Как обращаться к api.telegram.org по ip адресу своего vps?

    deepblack
    @deepblack
    Не совсем понятно что вы хотите в итоге получить? Поднять VPN?

    читал о vpn и proxy но ничего не понял, нужно указывать порт, логин и т.п.

    Тут ничего сложного нет. Большинство инструкций довольно просты.

    Давайте разберём на примере (если у вас есть vps, vds за границей):
    Есть такая штука https://github.com/hwdsl2/setup-ipsec-vpn это обертка над Libreswan
    Есть также оно же, завёрнутое в докер https://github.com/hwdsl2/docker-ipsec-vpn-server
    И я думаю это то, что вам нужно.

    Устанавливаете Docker CE
    Выполняете на сервере:
    docker run \
        --name ipsec-vpn-server \
        --env-file ./vpn.env \
        --restart=always \
        -p 500:500/udp \
        -p 4500:4500/udp \
        -d --privileged \
        hwdsl2/ipsec-vpn-server


    Для ./vpn.env указываете свой путь.
    Содержимое vpn.env:
    VPN_IPSEC_PSK=your_ipsec_pre_shared_key
    VPN_USER=your_vpn_username
    VPN_PASSWORD=your_vpn_password


    После запуска проверяете что контейнер запустился docker logs ipsec-vpn-server
    Должно появиться нечто похожее на:
    Connect to your new VPN with these details:
    
    Server IP: your_vpn_server_ip
    IPsec PSK: your_ipsec_pre_shared_key
    Username: your_vpn_username
    Password: your_vpn_passwor


    Вот тут инструкция как настраивать клиентов.

    У меня отлично работает на чистом 9-ом Android One
    и под Linux (под виндой не пробовал).

    ##########
    Мне же нужно иметь доступ к api.telegram.org просто заменив его на свой ip адрес на digitalocean.
    Прочитал здесь комментарий в вопросе

    На nginx проксируют доступ к api.telegram.org.

    но не понял как это реализовать, указанные команды у меня не сработали :(

    Тут нужно смотреть как вы пробовали (приложите к вопросу конфиг nginx), в общем ничего сложного в этом нет.

    P.S. возможно на VDS/VPS нужно будет открыть порты, тут уж вы потрудитесь это сделать сами.
    Ответ написан
    Комментировать
  • Как добавить лайки в telegram?

    deepblack
    @deepblack Куратор тега Python
    Как добавить лайки в telegram?

    Взять и добавить.

    А если серьезно, отправляй пользователям клавиатуру (кнопку) с привязкой к посту и подсчитывай нажатия.
    Ответ написан
    2 комментария
  • Как отправить сообщение в телеграм боте с помощью запроса?

    deepblack
    @deepblack Куратор тега Python
    requests.get зачем get если там должен быть post?
    curl'ом вот так:
    curl -X POST \
         -H 'Content-Type: application/json' \
         -d '{"chat_id": "888888", "text": "This is a test message from curl", "disable_notification": true}' \
         https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage


    Python:
    import requests
    import json
    
    proxy = {'https': 'socks5h://user:password@IP:1080'}
    
    token = '8888:ABC'
    chat_id = 88888
    
    URL = 'https://api.telegram.org/bot' + token + '/sendMessage'
    reply_markup ={ "keyboard": [["Yes", "No"], ["Maybe"], ["1", "2", "3"]], "resize_keyboard": True}
    data = {'chat_id': chat_id, 'text': '123', 'reply_markup': json.dumps(reply_markup)}
    r = requests.post(URL, data=data, proxies=proxy)
    
    print(r.json())
    Ответ написан
    Комментировать
  • Как после ввода команды, получить текст?

    deepblack
    @deepblack Куратор тега Python
    я читал этот раздел. Мне надо, чтобы бот отвечал именно так после команды /cup. А просто текст он должен обрабатывать по другому.

    Давай я посмотрю за тебя документацию внимательно:
    @bot.message_handler(commands=['cup'])
    def command_start(m):
        ... # тут твой код
    
    # default handler for every other text
    @bot.message_handler(func=lambda message: True, content_types=['text'])
    def command_default(m):
        # this is the standard reply to a normal message
        bot.send_message(m.chat.id, "I don't understand \"" + m.text + "\"\nMaybe try the help page at /help")
    Ответ написан
    1 комментарий