Prompt Title: бот

Created 1 year ago
Votes 0
Views 82 times
0
Human: <ya-tr-span data-index="119-0" data-translated="true" data-source-lang="en" data-target-lang="ru" data-value="покажи код телеграм бота с sql" data-translation="покажи код телеграм бота с sql" data-ch="0" data-type="trSpan">покажи код телеграм бота с sql</ya-tr-span>
ChatGPT:

Конечный код телеграм-бота с SQL-базой данных зависит от конкретных потребностей и функциональности, которую вы хотите реализовать. Однако, я могу предоставить общую структуру кода для создания телеграм-бота с использованием SQL-базы данных.

Для начала, вам потребуется установить необходимые пакеты для работы с телеграм API и SQL-базами данных. Например, вы можете использовать библиотеки python-telegram-bot и sqlite3:

pip install python-telegram-bot pip install sqlite3

Затем, вы можете начать создание телеграм-бота следующим образом:

pythonКопировать код
import sqlite3 from telegram.ext import Updater, CommandHandler, MessageHandler, Filters # Инициализация базы данных conn = sqlite3.connect('database.db') cursor = conn.cursor() # Создание таблицы пользователей cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, first_name TEXT, last_name TEXT, username TEXT, chat_id INTEGER UNIQUE ) ''') conn.commit() # Обработчик команды /start def start(update, context): chat_id = update.message.chat_id first_name = update.message.chat.first_name last_name = update.message.chat.last_name username = update.message.chat.username # Добавление нового пользователя в базу данных cursor.execute(''' INSERT OR IGNORE INTO users (first_name, last_name, username, chat_id) VALUES (?, ?, ?, ?) ''', (first_name, last_name, username, chat_id)) conn.commit() context.bot.send_message(chat_id=chat_id, text='Привет! Я телеграм-бот!') # Обработчик текстовых сообщений def echo(update, context): chat_id = update.message.chat_id text = update.message.text # Добавление сообщения в базу данных cursor.execute(''' INSERT INTO messages (chat_id, message) VALUES (?, ?) ''', (chat_id, text)) conn.commit() context.bot.send_message(chat_id=chat_id, text=text) # Создание телеграм-бота updater = Updater(token='TOKEN', use_context=True) dispatcher = updater.dispatcher # Добавление обработчиков команд и сообщений dispatcher.add_handler(CommandHandler('start', start)) dispatcher.add_handler(MessageHandler(Filters.text, echo)) # Запуск телеграм-бота updater.start_polling() updater.idle() # Закрытие базы данных conn.close()

В этом примере, мы создали базу данных SQLite с таблицей пользователей и обработчики команды /start и текстовых сообщений. Когда пользователь запускает бота с командой /start, мы добавляем его данные в таблицу пользователей. Когда пользователь отправляет текстовое сообщение, мы добавляем это сообщение в другую таблицу.

Конечно, этот код может быть улучшен и доработан

Human: <ya-tr-span data-index="98-0" data-translated="true" data-source-lang="en" data-target-lang="ru" data-value="дороботай и улучши" data-translation="дороботай и улучши" data-ch="0" data-type="trSpan">дороботай и улучши</ya-tr-span>
ChatGPT:

Ниже я приведу код, который включает в себя следующие дополнительные функции:

  • использование модуля logging для ведения журнала работы бота;
  • обработку команды /help;
  • добавление таблицы сообщений и возможность получения истории сообщений для определенного пользователя;
  • добавление таблицы подписчиков и возможность подписаться на получение рассылки;
  • использование классов и методов для улучшения структуры кода и легкости его поддержки.
pythonКопировать код
import sqlite3 import logging from telegram import Update from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext # Настройки базы данных DB_NAME = 'database.db' USERS_TABLE = 'users' MESSAGES_TABLE = 'messages' SUBSCRIBERS_TABLE = 'subscribers' # Настройки логирования logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO) logger = logging.getLogger(__name__) # Класс для работы с базой данных class Database: def __init__(self): self.conn = sqlite3.connect(DB_NAME) self.cursor = self.conn.cursor() def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): self.conn.close() def init_tables(self): self.cursor.execute(f''' CREATE TABLE IF NOT EXISTS {USERS_TABLE} ( id INTEGER PRIMARY KEY, first_name TEXT, last_name TEXT, username TEXT, chat_id INTEGER UNIQUE ) ''') self.cursor.execute(f''' CREATE TABLE IF NOT EXISTS {MESSAGES_TABLE} ( id INTEGER PRIMARY KEY, chat_id INTEGER, message TEXT, timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ''') self.cursor.execute(f''' CREATE TABLE IF NOT EXISTS {SUBSCRIBERS_TABLE} ( chat_id INTEGER PRIMARY KEY, subscription_active INTEGER DEFAULT 0 ) ''') self.conn.commit() def add_user(self, user_data): self.cursor.execute(f''' INSERT OR IGNORE INTO {USERS_TABLE} (first_name, last_name, username, chat_id) VALUES (?, ?, ?, ?) ''', user_data) self.conn.commit() def get_user_messages(self, chat_id, limit=10): self.cursor.execute(f''' SELECT message, timestamp FROM {MESSAGES_TABLE} WHERE chat_id = ? ORDER BY timestamp DESC LIMIT ? ''', (chat_id, limit)) return self.cursor.fetchall() def subscribe_user(self, chat_id): self.cursor.execute(f''' INSERT OR IGNORE INTO {SUBSCRIBERS_TABLE} (chat_id) VALUES (?) ''', (chat_id,)) self.cursor.execute(f''' UPDATE {SUBSCRIBERS_TABLE} SET subscription_active=1 WHERE chat_id=? ''', (chat_id,)) self.conn
avatar
Хазенов
Shared 2 prompts
Created 1 year ago

Leave a Comment