Отправлять сообщения в группу телеграмм без ввода данных пользователем

Я пытаюсь создать бота, который автоматически отправляет сообщение всякий раз, когда в последних новостях появляются обновления, используя python. Вот что я сделал.

companies = {
    "name_1": {
        "rss": "name_1 rss link",
        "link": "name_1 link"
    }
}

import feedparser as fp
import time, telebot
token = <TOKEN>
bot = telebot.TeleBot(token)
LIMIT = 1
while True:
    def get_news():
        count = 1
        news = []
        for company, value in companies.items():
            count = 1
            if 'rss' in value:
                d = fp.parse(value['rss'])
                for entry in d.entries:
                    if hasattr(entry, 'published'):
                        if count > LIMIT:
                            break
                        news.append(entry.link)
                        count = count + 1

        return (news)
    val = get_news()
    time.sleep(10)
    val2 = get_news()
    try:
        if val[0]!=val2[0]:
            bot.send_message(chat_id= "Hardcoded chat_id", text=val2[0])
    except Exception:
        pass

Как я могу обновить свой код, чтобы бот публиковал последние новости для всех групп, в которые он добавлен? Я получил chat_id с помощью: bot.get_updates()[-1].message.chat.id Есть предложения, как это автоматизировать?


person Joe    schedule 10.03.2018    source источник
comment
Ваш код можно было бы улучшить читаемость, если бы вы не делали отступы так глубоко (7 уровней! ... используйте функции для выделения фрагментов) Линус сказал следующее: news.ycombinator.com/item?id=3414637   -  person JohnGH    schedule 06.12.2019


Ответы (2)


Используя api python-telegram-bot, вы можете отправить такое сообщение

bot.send_message(id, text='Message')

вам нужны "бот" и "id"

Я храню их в словаре под названием «mybots», который я заполняю / обновляю, когда люди взаимодействуют с ботом в первый раз / или при последующем общении с ботом. Этот словарь можно дополнить, чтобы он оставался постоянным.

mybots = {}

def start(bot, update):
    """Send a message when the command /start is issued."""
      mybots[update.message.chat_id] = bot
      update.message.reply_text('Hello{}!'.format(
           update.effective_chat.first_name))

def send_later():
    for id, bot in mybots.items():
        bot.send_message(id, text='Beep!')
person 576i    schedule 14.04.2018

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

bot.sendMessage(chat_id=chat_id, text=msg)

полный код,

import telegram


#token that can be generated talking with @BotFather on telegram
my_token = ''

def send(msg, chat_id, token=my_token):
    """
    Send a message to a telegram user or group specified on chatId
    chat_id must be a number!
    """
    bot = telegram.Bot(token=token)
    bot.sendMessage(chat_id=chat_id, text=msg)
person Sumithran    schedule 26.12.2018
comment
В моем случае это группа prueba. Где мне нужно включить название группы в код? Этот код отправляет сообщение боту (но его никто не видит, только я), но не группе с именем prueba - person kamome; 19.07.2019
comment
привет @kamome, вам не нужно добавлять имя своей группы в код, вместо этого вам нужно добавить chat_id в код. если у вас возникли проблемы с поиском идентификатора chat_id определенной группы, обратитесь к этому - person Sumithran; 19.07.2019