【问题标题】:How to get messages of telegram channel by python-telegram-bot tool如何通过 python-telegram-bot 工具获取电报频道的消息
【发布时间】:2022-02-05 08:24:54
【问题描述】:

我想知道是否有一种可能的方法可以从电报频道获取消息,因为我知道我已登录到此帐户并且我是此频道的管理员,所以我只想要获取消息。

import feedparser
    from telegram import Update, ForceReply, InlineKeyboardButton, InlineKeyboardMarkup
    from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext, CallbackQueryHandler
    from bs4 import BeautifulSoup
    from datetime import datetime
    import json
    import telegram
    from time import sleep
    from telegram.ext import MessageHandler, Filters
    
    
    class Config:
        def __init__(self):
            with open("config.json", "r") as config:
                self.config = json.load(config)
    
    
    class TelegramBotChannel:
    
        def __init__(self, token, start_channel_id):
            self.updater = Updater(token=token, use_context=True)
            self.dispatcher = self.updater.dispatcher
            self.start_channel_id = start_channel_id
    
    
    if __name__ == '__main__':
        telegram_bot = TelegramBotChannel(Config().config["token"], Config().config["start"])
        pass

【问题讨论】:

    标签: telegram-bot python-telegram-bot


    【解决方案1】:

    要求:

    • 您的机器人应该在频道中。显然作为管理员

    所以首先创建一个函数:

    def forwader(update , context):
    context.bot.copy_message("@temporary2for"  ,"@tempmain" , update.channel_post.message_id)
    

    之后制作处理程序:

    forwadHandler= MessageHandler(Filters.text & (~Filters.command) , forwader)
    

    比注册你的处理程序:

    dispatcher.add_handler(forwadHandler)
    

    别忘了启动 Bot 轮询:

    updater.start_polling()
    updater.idle()
    

    完整代码:

    from telegram import bot
    from telegram.ext import Updater , CommandHandler , Filters , MessageHandler
    from config import useless
    import logging
    
    
    updater = Updater(token=useless, use_context=True)
    dispatcher = updater.dispatcher
    import logging
    logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
                         level=logging.INFO)
    
    
    
    
    
    def forwader(update , context):
        
        context.bot.copy_message("@temporary2for"  ,"@tempmain" , update.channel_post.message_id)
    
    
    forwadHandler= MessageHandler(Filters.text & (~Filters.command) , forwader)
    
    
    
    dispatcher.add_handler(forwadHandler)
    
    
    updater.start_polling()
    updater.idle()
    

    有些 Import 没用。

    【讨论】:

      【解决方案2】:

      这是使用电报机器人从频道获取消息的最少代码,电报机器人是频道的订阅者(仅可能是管理员订阅)。提供正确的 bot api 作为 KEY。:

      from api_keys import bot_api_key as KEY
      from telegram.ext import Updater, Filters, MessageHandler
      
      updater = Updater(token=KEY, use_context=True)
      dispatcher = updater.dispatcher
      
      
      def forwarder(update, context):
          msg = update.channel_post
          if msg:
              print(msg)
      
      
      forwardHandler = MessageHandler(Filters.text & (~Filters.command), forwarder)
      dispatcher.add_handler(forwardHandler)
      updater.start_polling()
      updater.idle()
      

      【讨论】:

        【解决方案3】:

        只有当聊天机器人是该频道的成员时,它们才能获取有关频道帖子的更新(并且聊天机器人只能以管理员身份添加到频道)。如果他们是频道中的管理员,他们将像从其他聊天中一样收到更新。

        【讨论】:

        • 我该怎么做?
        • 你到底怎么做?将您的机器人作为管理员添加到频道或为您的机器人获取更新?
        猜你喜欢
        • 2021-06-11
        • 1970-01-01
        • 2020-08-12
        • 1970-01-01
        • 2016-04-04
        • 2016-09-08
        • 2021-11-28
        • 1970-01-01
        • 2016-10-01
        相关资源
        最近更新 更多