[Python] Support Telegram Bot

  • Автор темы Автор темы reg1on
  • Дата начала Дата начала
Тг бот для службы поддержки вашего сервиса.
Python:
import sqlite3
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes

# Замените 'YOUR_BOT_TOKEN' на ваш токен
BOT_TOKEN = 'YOUR_BOT_TOKEN'

# ID чата для поддержки (можно узнать через @RawDataBot)
SUPPORT_CHAT_ID = -1001234567890  # Замените на реальный ID

# Подключение к базе данных SQLite
conn = sqlite3.connect('support_bot.db', check_same_thread=False)
cursor = conn.cursor()

# Создание таблицы для хранения сообщений
cursor.execute('''
CREATE TABLE IF NOT EXISTS messages (
    forwarded_message_id INTEGER PRIMARY KEY,
    user_id INTEGER NOT NULL
)
''')
conn.commit()

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text("Привет! Я бот поддержки. Напишите ваш вопрос, и я помогу.")

async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
    user_message = update.message.text
    user_id = update.message.from_user.id
    chat_id = update.message.chat_id
    forwarded_message = await update.message.forward(chat_id=SUPPORT_CHAT_ID)
    cursor.execute('INSERT INTO messages (forwarded_message_id, user_id) VALUES (?, ?)', (forwarded_message.message_id, user_id))
    conn.commit()

    await update.message.reply_text("Ваш вопрос передан в службу поддержки. Мы свяжемся с вами в ближайшее время!")

async def handle_support_reply(update: Update, context: ContextTypes.DEFAULT_TYPE):
    # Проверяем, что сообщение пришло из чата поддержки
    if update.message.chat_id == SUPPORT_CHAT_ID:
        reply_to_message = update.message.reply_to_message

        if reply_to_message:
            cursor.execute('SELECT user_id FROM messages WHERE forwarded_message_id = ?', (reply_to_message.message_id,))
            result = cursor.fetchone()

            if result:
                user_id = result[0]
                await context.bot.send_message(chat_id=user_id, text=update.message.text)
                await update.message.reply_text("Ответ отправлен пользователю.")
                cursor.execute('DELETE FROM messages WHERE forwarded_message_id = ?', (reply_to_message.message_id,))
                conn.commit()
            else:
                await update.message.reply_text("Не удалось найти исходное сообщение пользователя.")
        else:
            await update.message.reply_text("Пожалуйста, ответьте на пересланное сообщение.")

def main():
    application = Application.builder().token(BOT_TOKEN).build()
    application.add_handler(CommandHandler("start", start))
    application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
    application.add_handler(MessageHandler(filters.REPLY & filters.Chat(chat_id=SUPPORT_CHAT_ID), handle_support_reply))
    application.run_polling()

if __name__ == '__main__':
    try:
        main()
    finally:
        conn.close()
 
Назад
Сверху