Задать вопрос
Ответы пользователя по тегу Боты
  • Как заставить бота считать сколько сделал он рассылок по пользователям?

    Что то вроде этого?
    Попробуй:
    count = 0
    def text(message):
        global count
        conn = sqlite3.connect('users.db')
        cursor = conn.cursor()
        cursor.execute("SELECT id FROM login_id")
        results = cursor.fetchall()
        for result in results:
            try:
                bot.send_message(result[0], message.text)
                count += 1
            except:
                pass
        bot.send_message(message.chat.id, 'Рассылка ' + str(count))


    Бот должен отправить сообщение админу (рассылка "число") после рассылки.
    Ответ написан
    3 комментария
  • Телеграмм БОТ граббер на python как доработать?

    Думаю Вам нужно что то вроде этого

    import shelve
    import time
    import re
    from pyrogram import Client, filters
    from pyrogram.errors import RPCError
    from pyrogram.types import Message
    from bs4 import BeautifulSoup
    from config import API_ID, API_HASH, PHONE_NUMBER, PUBLIC_FROM, PUBLIC_TO
    
    db = shelve.open('data.db', writeback=True)
    bot = Client('RepBot', API_ID, API_HASH, phone_number=PHONE_NUMBER)
    local_time = time.localtime()
    print("ReprBot - Запущен", local_time.tm_hour, ":", local_time.tm_min)
    
    # Create a set to store seen message ids
    seen_messages = set()
    
    def save_post(message: Message) -> str:
        post_id = f'{message.chat.id}_{message.message_id}'
        db[post_id] = {
            'username': message.chat.username,
            'message_id': message.message_id
        }
        return post_id
    
    def remove_links(text: str) -> str:
        soup = BeautifulSoup(text, 'lxml')
        for link in soup.find_all('a'):
            link.decompose()
        return soup.get_text()
    
    @bot.on_message(filters.chat(PUBLIC_FROM))
    def new_channel_post(_: Client, msg: Message) -> None:
        if msg.message_id in seen_messages:
            return
        else:
            seen_messages.add(msg.message_id)
        post_id = save_post(msg)
        local_time = time.localtime()
        print(f'Новый пост в группе({msg.sender_chat.username or msg.sender_chat.id})' ' Время:', local_time.tm_hour, ":", local_time.tm_min, ":", local_time.tm_sec)
        text = msg.text or msg.caption
        # Remove links from text
        text = remove_links(text)
        text = re.sub(r'https?:\/\/\S+', '', text)
        try:
            bot.send_message(chat_id=PUBLIC_TO, text=text)
        except RPCError:
            print('Не удалось переслать пост:', post_id)
    
    if __name__ == '__main__':
        bot.run()

    Этот код изменяет исходный скрипт путем:

    1. Добавление набора под названием seen_messages для хранения идентификаторов сообщений, которые уже были просмотрены и размещены повторно.

    2. Добавление проверки в начале функции new_channel_post, чтобы увидеть, находится ли идентификатор сообщения текущей записи в наборе seen_messages.
    Если это так, функция возвращает и не перепечатывает сообщение.
    Если его нет в наборе, идентификатор сообщения добавляется в набор, и процесс повторной отправки продолжается.

    3. Добавление функции remove_links(text: str) -> str, которая использует библиотеку BeautifulSoup для анализа текста и удаления из него всех ссылок.

    4. Использование функции remove_links для удаления ссылок из текста или заголовка поста перед репостом.

    5. Использование модуля re для удаления всех оставшихся ссылок в тексте перед репостом.

    Это только пример кода и логики, здесь могут быть ошибки, проверьте все и в случае чего переделайте под свои нужды
    Ответ написан