Телеграм бот техподдержки на Python | Читы [KILLCC.XYZ] — Free Game Hacks & Cheats
Загрузка...

PYTHON Телеграм бот техподдержки на Python

Добро пожаловать на форум!

Присоединяйтесь к нашему бесплатному форуму. Мы делимся знаниями, публикациями из разных категорий, и всегда рады новым пользователям.

Зарегистрироваться
0%
🎯 LEVEL 1
⭐ 1 XP
Регистрация
13 Фев 2025
Сообщения
29
Конкурсы
0
Реакции
7
Баллы
3
Возраст
36
Требования для запуска бота:

Python 3.8+
установлен на сервере или ПК.
Установить библиотеку aiogram:
Код:
pip install aiogram

Создать файл bot.py, вставить туда код бота (твой токен и ID беседу куда будут приходить обращения).
Запустить бота
Python:
python bot.py

Убедиться, что бот добавлен в группу поддержки с правами отправлять сообщения.
Пользователи пишут боту в личку, чтобы бот запомнил их ID.
В группе поддержки можно использовать команду /otvet @username текст для ответа.

Python:
import logging
from aiogram import Bot, Dispatcher, executor, types
import re

API_TOKEN = "7847568827:AAFAGHqyBbnaCae4j52HQdQYsf1dzlB4hAc"


GROUP_CHAT_ID = -1002418234487

logging.basicConfig(level=logging.INFO)

bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)

user_states = {}
user_db = {}

def normalize_username(username):
    if not username:
        return ""
    return username.lower().lstrip("@")

@dp.message_handler(commands=['start'])
async def cmd_start(message: types.Message):
    keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
    keyboard.add("? Написать обращение")
    keyboard.add("?‍? Написать разработчику")
    keyboard.add("? Перейти на форум")
    await message.answer(
        "Привет! Я бот тех. поддержки.\nВыберите действие:",
        reply_markup=keyboard
    )

@dp.message_handler(lambda message: message.text == "? Написать обращение")
async def write_issue(message: types.Message):
    user_states[message.from_user.id] = {"step": "waiting_for_nick"}
    await message.answer("Введите ваш ник на форуме:")

@dp.message_handler(lambda message: user_states.get(message.from_user.id, {}).get("step") == "waiting_for_nick")
async def get_nick(message: types.Message):
    user_states[message.from_user.id]["nick"] = message.text.strip()
    user_states[message.from_user.id]["step"] = "waiting_for_issue"
    await message.answer("Опишите суть вашего обращения:")

@dp.message_handler(lambda message: user_states.get(message.from_user.id, {}).get("step") == "waiting_for_issue")
async def get_issue(message: types.Message):
    if message.from_user.username:
        user_db[normalize_username(message.from_user.username)] = message.from_user.id

    data = user_states[message.from_user.id]
    nick = data["nick"]
    issue = message.text.strip()

    await message.answer("✅ Ваше обращение принято в обработку, спасибо! ?")

    msg = (
        "? *Новое обращение в тех. поддержку:*\n"
        f"? Пользователь: @{message.from_user.username or message.from_user.first_name}\n"
        f"? Ник форума: {nick}\n"
        f"? Суть: {issue}"
    )

    try:
        await bot.send_message(chat_id=GROUP_CHAT_ID, text=msg, parse_mode="Markdown")
    except Exception as e:
        logging.error(f"Ошибка при отправке сообщения в группу: {e}")
        admin_id = message.from_user.id
        await bot.send_message(admin_id, f"Ошибка при отправке обращения в группу:\n{e}")

    user_states.pop(message.from_user.id, None)

@dp.message_handler(commands=['otvet'])
async def answer_support_group(message: types.Message):

    if message.chat.id != GROUP_CHAT_ID:
        await message.reply("❌ Эта команда доступна только в группе поддержки.")
        return

    args = message.get_args()
    if not args:
        await message.reply("Использование: /otvet @username текст_ответа")
        return

    match = re.match(r"@?(\w+)\s+(.+)", args)
    if not match:
        await message.reply("Пожалуйста, укажите через пробел: @username текст_ответа")
        return

    username = match.group(1).lower()
    text = match.group(2)

    user_id = user_db.get(username)
    if not user_id:
        await message.reply("Неверный user_id. Введите числовой ID пользователя или сначала чтобы пользователь писал боту.")
        return

    try:
        await bot.send_message(user_id, f"? Ответ от поддержки:\n{text}")
        await message.reply("✅ Сообщение отправлено пользователю.")
    except Exception as e:
        await message.reply(f"Ошибка при отправке сообщения пользователю: {e}")

@dp.message_handler(commands=['staty'])
async def staty(message: types.Message):
    text = (
        "? Привет! Этот бот тех. поддержки создан для форума pawno-live.ru\n"
        "Создатель:
    )
    await message.answer(text)

@dp.message_handler(commands=['bot', 'бот'])
async def bot_info(message: types.Message):
    text = (
        f"? Я бот тех. поддержки.\n"
        f"Мой username: @{(await bot.get_me()).username}\n"
        f"Мой ID: {bot.id if hasattr(bot, 'id') else 'неизвестно'}"
    )
    await message.answer(text)

@dp.message_handler(commands=['id'])
async def show_id(message: types.Message):
    chat_type = message.chat.type
    if chat_type in ['group', 'supergroup', 'channel']:
        await message.answer(f"ID этой беседы: {message.chat.id}")
    else:
        await message.answer(f"Ваш user_id: {message.from_user.id}")

@dp.message_handler(commands=['testgroup'])
async def test_group(message: types.Message):
    try:
        await bot.send_message(GROUP_CHAT_ID, "Тестовое сообщение в группу!")
        await message.answer("Сообщение в группу отправлено!")
    except Exception as e:
        await message.answer(f"Ошибка при отправке сообщения в группу: {e}")

@dp.message_handler(lambda message: message.text == "?‍? Написать разработчику")
async def contact_developer(message: types.Message):
    await message.answer("Связаться с разработчиком: ")

@dp.message_handler(lambda message: message.text == "? Перейти на форум")
async def go_to_forum(message: types.Message):
    keyboard = types.InlineKeyboardMarkup()
    keyboard.add(types.InlineKeyboardButton(text="Перейти на pawno-live.ru", url="https://pawno-live.ru"))
    await message.answer("Перейдите по ссылке ниже:", reply_markup=keyboard)

if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)
 
Последнее редактирование модератором:
Назад
Сверху Снизу