March 16

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


ссылка — https://drive.google.com/drive/u/0/folders/1kfKE7WoHyxtSCiv-APHKTrMFiHHO0nTG


Telegram-бот с сохранением сообщений в базе данных SQLite через многопроцессность

Введение

В данном руководстве мы создадим Telegram-бота, который способен асинхронно сохранять сообщения от пользователей в базу данных SQLite и уведомлять владельца бота о каждом новом сообщении. Для обработки сообщений в фоновом режиме мы будем использовать многопроцессность, что позволит боту эффективно работать даже под высокой нагрузкой.

Подготовка

Прежде всего, убедитесь, что на вашем компьютере установлен Python, а также следующие библиотеки:

  • pyTelegramBotAPI для взаимодействия с Telegram API.
  • sqlite3 для работы с базой данных SQLite.

Если необходимо, установите библиотеку pyTelegramBotAPI:

pip install pyTelegramBotAPI

Создание бота и базы данных

  1. Инициализация бота: Создайте файл bot.py и импортируйте необходимые модули:
import telebot
import sqlite3
from multiprocessing import Process, Lock

Задайте токен вашего бота, полученный от @BotFather, и идентификатор пользователя (владельца бота):

TOKEN = '6721510821:AAH2SEW8-MLM8emjxBZD6mdJVdNAxdoFEUg'
OWNER_USER_ID = '1155805451'
bot = telebot.TeleBot(TOKEN)

2. Многопроцессная работа с базой данных: Для сохранения сообщений в базу данных используем функцию db_worker, которая будет запускаться в отдельном процессе:

def db_worker(lock, message):
    with lock:
        conn = sqlite3.connect('pon.db')
        cursor = conn.cursor()

        cursor.execute('''
            CREATE TABLE IF NOT EXISTS messages (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                user_id INTEGER,
                username TEXT,
                message_text TEXT
            )
        ''')
        conn.commit()

        username = message.from_user.username if message.from_user.username else "N/A"

        if str(message.from_user.id) == OWNER_USER_ID or message.chat.type == 'private':
            cursor.execute('INSERT INTO messages (user_id, username, message_text) VALUES (?, ?, ?)', (message.from_user.id, username, message.text))
            conn.commit()

            bot.send_message(OWNER_USER_ID, f"Новое сообщение от пользователя {username} ({message.from_user.id}):\n{message.text}")

        conn.close()

Эта функция создает таблицу messages, если она не существует, и добавляет в нее сообщения, а также уведомляет владельца бота о новых сообщениях.

3. Обработка входящих сообщений: Для обработки всех сообщений создаем обработчик, который запускает db_worker в отдельном процессе для каждого сообщения:

@bot.message_handler(func=lambda message: True)
def handle_all_messages(message):
    lock = Lock()
    process = Process(target=db_worker, args=(lock, message))
    process.start()
    process.join()

4. Запуск бота: В конце файла добавьте код для запуска бота:

if __name__ == "__main__":
    bot.polling(none_stop=True)

Заключение

Теперь у вас есть Telegram-бот, способный асинхронно сохранять сообщения от пользователей


https://chat.openai.com/share/c659fd31-5cb2-4eb4-8d62-6e464039f3e5