• Как отправить файл от телеграм бота?

    Danya_Violet
    @Danya_Violet
    CTO/CIO
    uis_pdf = open('files/' + uis_login + '.pdf', 'rb')
    bot.send_document(message.chat.id, uis_pdf)
    uis_pdf.close()
    Ответ написан
    Комментировать
  • Как после callback заново ввести текст?

    Danya_Violet
    @Danya_Violet
    CTO/CIO
    elif call.data == 'no':
            get_text_messages(call.message)
    Ответ написан
    Комментировать
  • Как заставить телеграм бота ждать сообщения от пользователя и записывать его в переменную на питоне?

    Danya_Violet
    @Danya_Violet
    CTO/CIO
    сделайте по аналогии

    для передачи текста в другую функцию используйте bot.register_next_step_handler().
    например этот код сначала запросит домен, после ФИО должность и номер телефона, и в итоге создаст корпоративный email с указанными параметрами
    
    @bot.message_handler(commands=['emailcreate'])
    def email_create_request_domain(message):
        if message.text.lower() == 'отмена':
            bot.send_message(message.from_user.id, 'На нетъ и суда нетъ')
            return
        send = bot.send_message(message.chat.id, 'Зьдати емейлъ\nПочтовый ящикъ:\n'
                                                 'example.ru, example1.ru, example2.ru, example3.ru, example4.ru ')
        bot.register_next_step_handler(send, email_create_request_data)
    
    
    def email_create_request_data(message):
        global domain_uis
        domain_uis = message.text.lower()
        if message.text.lower() == 'отмена':
            bot.send_message(message.from_user.id, 'На нетъ и суда нетъ')
            return
        send = bot.send_message(message.chat.id, 'Введите: ФИО должность нумеръ')
        bot.register_next_step_handler(send, email_create)
    
    
    def email_create(message):
        first = message.text.split()[1]
        last = message.text.split()[0]
        middle = message.text.split()[2]
        phone = message.text.split()[4]
        position = message.text.split()[3]
    
        uis_login = create_nickname(first, last, middle, 'email_create')
        bot.send_message(message.chat.id, '✅ логинъ')
    
        uis_password = create_password()
        bot.send_message(message.chat.id, '✅ шифръ')
    
        id_yc = create_email(first, last, middle, phone, position, uis_password, uis_login, domain_uis)
        if 'Response' in str(id_yc):
            bot.send_message(message.chat.id, '❌ емейлъ' + '\n' + id_yc)
            return
        else:
            bot.send_message(message.chat.id, '✅ емейлъ')
            bot.send_message(message.chat.id, uis_login + '@' + domain_uis + '\n' + uis_password)
    Ответ написан
    1 комментарий
  • Как сделать так, чтобы при не соответствии условиям бот прекращал дальнейшую работу?

    Danya_Violet
    @Danya_Violet
    CTO/CIO
    # Ограничение доступа к боту по ID
    @bot.message_handler(func=lambda message: message.chat.id not in users)
    def some(message):
        bot.send_message(message.chat.id, 'Не дозволено общаться с незнакомцами')
    
    
    # Ограничение выполнение команды start
    @bot.message_handler(func=lambda message: message.chat.id not in users, commands=['start'])
    def some(message):
        bot.send_message(message.chat.id, 'Не дозволено')
    
    
    # Ограничение выполнение команд
    @bot.message_handler(func=lambda message: message.chat.id not in users_command,
                         commands=['command1', 'command2', 'command3', 'command4'])
    def some(message):
        bot.send_message(message.chat.id, 'Не дозволено')
    Ответ написан
    Комментировать
  • Как отредактировать сообщение телеграм?

    Danya_Violet
    @Danya_Violet
    CTO/CIO
    пример для изменения inline клавиатуры. (используется @bot.callback_query_handler)
    bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='Выберите:',
                                  reply_markup=system_keyboard)
    Ответ написан
    Комментировать
  • Как получить текст в переменную из сообщения боту telegram на python?

    Danya_Violet
    @Danya_Violet
    CTO/CIO
    сам текст сообщения можно вытащить из message.text, для передачи этого текста в другую функцию используйте bot.register_next_step_handler().
    например этот код сначала запросит домен, после ФИО должность и номер телефона, и в итоге создаст корпоративный email с указанными параметрами

    @bot.message_handler(commands=['emailcreate'])
    def email_create_request_domain(message):
        if message.text.lower() == 'отмена':
            bot.send_message(message.from_user.id, 'На нетъ и суда нетъ')
            return
        send = bot.send_message(message.chat.id, 'Зьдати емейлъ\nПочтовый ящикъ:\n'
                                                 'example.ru, example1.ru, example2.ru, example3.ru, example4.ru ')
        bot.register_next_step_handler(send, email_create_request_data)
    
    
    def email_create_request_data(message):
        global domain_uis
        domain_uis = message.text.lower()
        if message.text.lower() == 'отмена':
            bot.send_message(message.from_user.id, 'На нетъ и суда нетъ')
            return
        send = bot.send_message(message.chat.id, 'Введите: ФИО должность нумеръ')
        bot.register_next_step_handler(send, email_create)
    
    
    def email_create(message):
        first = message.text.split()[1]
        last = message.text.split()[0]
        middle = message.text.split()[2]
        phone = message.text.split()[4]
        position = message.text.split()[3]
    
        uis_login = create_nickname(first, last, middle, 'email_create')
        bot.send_message(message.chat.id, '✅ логинъ')
    
        uis_password = create_password()
        bot.send_message(message.chat.id, '✅ шифръ')
    
        id_yc = create_email(first, last, middle, phone, position, uis_password, uis_login, domain_uis)
        if 'Response' in str(id_yc):
            bot.send_message(message.chat.id, '❌ емейлъ' + '\n' + id_yc)
            return
        else:
            bot.send_message(message.chat.id, '✅ емейлъ')
            bot.send_message(message.chat.id, uis_login + '@' + domain_uis + '\n' + uis_password)
    Ответ написан
    Комментировать
  • Как сделать приветствие ботов в групповом чате Telegram?

    Danya_Violet
    @Danya_Violet
    CTO/CIO
    @bot.message_handler(content_types=["new_chat_members"])
    def handler_new_member(message):
        user_name = message.new_chat_member.first_name
        bot.send_message(message.chat.id, "Добро пожаловать, {0}!".format(user_name))


    источник
    Ответ написан
    Комментировать
  • Как отредактировать сообщение используя bot.edit_message_text?

    Danya_Violet
    @Danya_Violet
    CTO/CIO
    для Inline
    bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='Выберите:',
                                  reply_markup=service_keyboard)
    Ответ написан
    Комментировать
  • Как получить все диалоги Telegram?

    Danya_Violet
    @Danya_Violet
    CTO/CIO
    Отправка сообщений от своего имени
    get.contacts() - получить контакты
    get_history() - получить историю
    get_dialogs() - получить диалоги

    from pyrogram import Client
    
    app = Client(
        session_name="pyro",
        proxy=dict(
            hostname="",
            port=1080,
            username="",
            password=""),
        api_id='',
        api_hash='')
    
    app.start()
    
    app.send_message(chat_id=1, text='Hi, Pavel')
    Ответ написан
    Комментировать
  • Как использовать telegram.ReplykeyboardMarkup?

    Danya_Violet
    @Danya_Violet
    CTO/CIO
    Если вы про это
    5d666f17a8d52496414331.png
    то:
    @bot.message_handler(commands=['start'])
    def cmd_start(message):
        start_keyboard = types.InlineKeyboardMarkup()
        start_service = types.InlineKeyboardButton(text='Службы', callback_data='service')
        start_system = types.InlineKeyboardButton(text='Система', callback_data='system')
        start_check = types.InlineKeyboardButton(text='Чек', callback_data='check')
        start_other = types.InlineKeyboardButton(text='Другое', callback_data='other')
        start_keyboard.add(start_service, start_system)
        start_keyboard.add(start_check, start_other)
        bot.send_message(message.chat.id, '', reply_markup=start_keyboard)
    
        start = telebot.types.ReplyKeyboardMarkup(True, False)
        start.row('Wunderlist')
        start.row('Telegraph')
        start.row('Погода')
        start.row('Контакты')
        bot.send_message(message.from_user.id, 'Выбери сервис', reply_markup=start)
    Ответ написан
    Комментировать
  • Как сделать ссылку на приватный канал, чтобы отображалась в виде кнопки в Telegram боте?

    Danya_Violet
    @Danya_Violet
    CTO/CIO
    def send_responsible(tlgrm_id_responsible, title, director, d_line, id_task, t_url):
        msg = {'chat_id': tlgrm_id_responsible,
               'text': ' ' + title + '\n\n' + '✍ ' + director + '\n' + '⏰ ' + d_line + '\n' + ' '
                       + '[Задача № ' + id_task + ']' + '(' + t_url + ')', 'parse_mode': 'Markdown'}
        requests.post(const.tlgrm_url, data=msg, proxies=const.proxy)

    в сообщении ссылка будет "скрыта" за текстом, так как она была бы в теге <a href="URL">...</a>
    Ответ написан
    Комментировать
  • Как просмотреть сообщения, которые отправляли боту в телеграмм?

    Danya_Violet
    @Danya_Violet
    CTO/CIO
    можно просто логировать в файл, например так:

    def log(message):
        print("<!------!>")
        print(datetime.now())
        print("Сообщение от {0} {1} (id = {2}) \n {3}".format(message.from_user.first_name,
                                                                  message.from_user.last_name,
                                                                  str(message.from_user.id), message.text))
    
    @bot.message_handler(commands=['create'])
    def cmd_create(message):
        send = bot.send_message(message.chat.id, 'Введи название задачи')
        bot.register_next_step_handler(send, create)
        log(message)
    Ответ написан
    Комментировать
  • Как получить id юзера / chat id telebot?

    Danya_Violet
    @Danya_Violet
    CTO/CIO
    body = '{message}\n' \
               '--\n' \
               '{first}, {last}\n' \
               '{username}, {id}'.format(message=message.text, first=message.from_user.first_name,
                                         last=message.from_user.last_name, username=message.from_user.username,
                                         id=message.chat.id)
    Ответ написан
    Комментировать
  • Telegram bot. как вывести инлайновые кнопки и клавиатуру вместе?

    Danya_Violet
    @Danya_Violet
    CTO/CIO
    5d666f17a8d52496414331.png

    Если Вы про такое, то:

    @bot.message_handler(commands=['start'])
    def cmd_start(message):
        start_keyboard = types.InlineKeyboardMarkup()
        start_service = types.InlineKeyboardButton(text='Службы', callback_data='service')
        start_system = types.InlineKeyboardButton(text='Система', callback_data='system')
        start_check = types.InlineKeyboardButton(text='Чек', callback_data='check')
        start_other = types.InlineKeyboardButton(text='Другое', callback_data='other')
        start_keyboard.add(start_service, start_system)
        start_keyboard.add(start_check, start_other)
        bot.send_message(message.chat.id, '', reply_markup=start_keyboard)
    
        start = telebot.types.ReplyKeyboardMarkup(True, False)
        start.row('Wunderlist')
        start.row('Telegraph')
        start.row('Погода')
        start.row('Контакты')
        bot.send_message(message.from_user.id, 'Выбери сервис', reply_markup=start)
    Ответ написан
    1 комментарий
  • Как объединить schedule и bot.polling()?

    Danya_Violet
    @Danya_Violet
    CTO/CIO
    def send_message():
    <...>
    
    schedule.every(5).minutes.do(send_message)
    
    while True:
        schedule.run_pending()
        time.sleep(1)
    Ответ написан
  • Как редактировать генерируемый текст в телеграмм боте?

    Danya_Violet
    @Danya_Violet
    CTO/CIO
    if call.data == 'Принять заказ':
            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='Ваш заказ принят')
    
    elif call.data == 'Принять заказ':
            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='Ваш заказ отклонён')
    Ответ написан
    1 комментарий
  • Как импортировать всё из файла python?

    Danya_Violet
    @Danya_Violet
    CTO/CIO
    Пробовали переименовать файл site.py? Возможно есть такой модуль, поэтому и не импортируется
    Ответ написан
    Комментировать
  • Bot телеграмм при запуске выдает ошибку, как исправить?

    Danya_Violet
    @Danya_Violet
    CTO/CIO
    import telebot
    from telebot import apihelper
    
    bot = telebot.TeleBot(TOKEN)
    apihelper.proxy = {'https': 'socks5h://user:password@IP:1080'}


    pyTelegramBotAPI#proxy

    If you want to use socket5 proxy you need install dependency pip install requests[socks] and make sure, that you have the latest version of gunicorn, PySocks, pyTelegramBotAPI, requests and urllib3


    в документации socks5://, попробуйте socks5h://
    Ответ написан
    Комментировать
  • Получить ответ пользователя telegram bot?

    Danya_Violet
    @Danya_Violet
    CTO/CIO
    если без бэкенда, то возможно
    вызывать https://api.telegram.org/botTOKEN/getupdates после того как человек "вышлет данные по договору №3" и разбирать json.

    если же библиотека, например, pyTelegramBotAPI

    для текстовых данных:
    @bot.message_handler(commands=['subscribe'])
    def send_welcome(message):
        global sub
        sub = [line.rstrip('\n') for line in open(subscribefile, 'rt')]
        if str(message.text) not in sub:
            with open(subscribefile, 'a') as f:
                f.write(str(message.text) + "\n")
            sub = [line.rstrip('\n') for line in open(subscribefile, 'rt')]
            bot.send_message(message.chat.id, "чат айди записан")


    для файлов:
    @bot.message_handler(content_types=['document'])
    def handle_file(message):
        try:
            chat_id = message.chat.id
            file_info = bot.get_file(message.document.file_id)
            downloaded_file = bot.download_file(file_info.file_path)
            src = 'C:/Python/Project/tg_bot/files/received/' + message.document.file_name;
            with open(src, 'wb') as new_file:
                new_file.write(downloaded_file)
            bot.reply_to(message, "Пожалуй, я сохраню это")
        except Exception as e:
            bot.reply_to(message, e
    Ответ написан
    Комментировать
  • PyTelegramBotApi. Как реализовать функцию изменения callback клавиатуры после нажатия на кнопку?

    Danya_Violet
    @Danya_Violet
    CTO/CIO
    это отправит пользователю инлайн клавиатуру по команде /start
    @bot.message_handler(commands=['start'])
    def cmd_start(message):
        start_keyboard = types.InlineKeyboardMarkup()
        start_service = types.InlineKeyboardButton(text='Службы', callback_data='service')
        start_other = types.InlineKeyboardButton(text='Другое', callback_data='other')
        start_keyboard.add(start_service, start_other)
        bot.send_message(message.chat.id, 'принята команда /start', reply_markup=start_keyboard)


    это изменит клавиатуру отправленную после /start если пользователь нажал на инлайн кнопку "Другое"
    if call.data == 'other':
            service_keyboard = types.InlineKeyboardMarkup()
            service_comproxy_k = types.InlineKeyboardButton(text='Comproxy', callback_data='comproxy')
            service_back_k = types.InlineKeyboardButton(text='Назад', callback_data='back')
            service_keyboard.add(service_comproxy_k, service_back_k)
            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='Выберите:',
                                  reply_markup=service_keyboard)
    Ответ написан
    Комментировать