сделать бот telegram используя python - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь создать бот-телеграмму, используя python, но по какой-то причине он не публикует информацию в телеграмме. мой код должен послать фрейм данных в telegram в виде таблицы, но он возвращает уведомление (даже ошибку), когда я вызываю его из telegram.

from telegram.ext import Updater, InlineQueryHandler, CommandHandler
import requests
import re
import pandas as pd

def get_data():
    data = pd.read_excel('C:/Users/admin/Desktop/data.xlsx')# opening xlsx file as the input 
    data = data.to_string(columns = ['c.1', 'c.2'], index = False, header = True, line_width = 70, justify = 'left')
    return data

def result(bot, update):
    data = get_data()
    chat_id = update.message.chat_id
    bot.send_message(chat_id=chat_id, table=data)
    bot.send_photo(chat_id=chat_id, photo=data)

def main():
    updater = Updater('Token key')
    dp = updater.dispatcher
    dp.add_handler(CommandHandler('result',result))
    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()

1 Ответ

0 голосов
/ 17 февраля 2020

Вы пытались использовать новый CallbackContext? При запуске бота должно быть сообщение со ссылкой на эту страницу: https://github.com/python-telegram-bot/python-telegram-bot/wiki/Transition-guide-to-Version-12.0). Там написано:

Теперь перейдем к основной массе изменений. Вы хотите изменить все функции обратного вызова из следующего:

def start(bot, update, args, job_queue):
    # Stuff here

на новый стиль с помощью CallbackContext

def start(update: Update, context: CallbackContext):
    # Stuff here
    # args will be available as context.args
    # jobqueue will be available as context.jobqueue

Я получил его для работы с минимальный пример, подобный этому:

from telegram.ext import Updater, InlineQueryHandler, CommandHandler

def result(update, context):
    print('result called')
    data = 'mydata'
    update.message.reply_text(data)

def main():
    updater = Updater('Token', use_context=True)
    dp = updater.dispatcher
    dp.add_handler(CommandHandler('result',result))
    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()

PS: Вы не используете requests и re из импорта.

...