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()
/start
/start
использование модуля 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