import telebot
import sqlite3
from telebot import types
import os
# Создание экземпляра бота
bot = telebot.TeleBot('...')
admin_chat_id = [5903933731, 6284726838]
# Подключение к базе данных
conn = sqlite3.connect('users.db', check_same_thread=False)
# Создание таблицы пользователей, если она не существует
with conn:
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT, tg_id INTEGER UNIQUE, application_sent INTEGER)")
# Получение списка пользователей из базы данных
def get_users():
with conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
return cursor.fetchall()
# Обновление информации о пользователе в базе данных
def update_user_info(user_id, username):
with conn:
cursor = conn.cursor()
cursor.execute("UPDATE users SET username=? WHERE tg_id=?", (username, user_id))
conn.commit()
# Обработчик команды /start
@bot.message_handler(commands=['start'])
def start_command(message):
# Создание клавиатуры с кнопками
keyboard = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True)
button1 = types.KeyboardButton("Чат команды")
button2 = types.KeyboardButton("Мануал для новичков")
keyboard.add(button1, button2)
# Отправка приветственного сообщения с клавиатурой и анимацией
script_dir = os.path.dirname(os.path.abspath(__file__))
animation_path = os.path.join(script_dir, "1.mp4")
caption_text = " PANDA PROJECT \n\n" \
"Test"
"Test"
# Отправка анимации с прикрепленным текстом
with open(animation_path, 'rb') as animation_file:
bot.send_animation(message.chat.id, animation_file, caption=caption_text, reply_markup=keyboard)
bot.send_message(message.chat.id, "Выбери одну из опций:", reply_markup=keyboard)
# Добавление пользователя в базу данных (если он уникален)
user = message.from_user
with conn:
cursor = conn.cursor()
cursor.execute("INSERT OR IGNORE INTO users (username, tg_id, application_sent) VALUES (?, ?, ?)",
(user.username if user.username else "", user.id, 0))
conn.commit()
# Обработчик нажатия на кнопку "Чат команды"
@bot.message_handler(func=lambda message: message.text == "Чат команды")
def team_chat_command(message):
# Создание клавиатуры с кнопками "Проверить" и "Назад"
keyboard = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True)
button_check = types.KeyboardButton("Проверить")
button_back = types.KeyboardButton("Назад")
keyboard.add(button_check, button_back)
# Отправка ссылки на чат команды с описанием и кнопкой "Проверить"
chat_link = "https://t.me/+auRG72uUdCQxMWFi"
chat_description = "Нажмите кнопку \"Проверить\", если Вы подали заявку на вступление. Мы уведомим админа."
bot.send_message(message.chat.id, chat_description, reply_markup=keyboard)
bot.send_message(message.chat.id, chat_link)
# Обработчик нажатия на кнопку "Проверить"
@bot.message_handler(func=lambda message: message.text == "Проверить")
def check_button_command(message):
# Получение информации о пользователе из базы данных
with conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE tg_id=?", (message.from_user.id,))
user = cursor.fetchone()
if user:
if user[3] == 1: # Проверяем значение столбца application_sent
bot.send_message(message.chat.id, "Мы уже уведомили админа. Ожидайте!")
else:
# Уведомление администратору
for admin_id in admin_chat_id:
bot.send_message(admin_id, f"Пользователь @{user[1]} с tg_id {user[2]} отправил заявку на вступление в чат.")
# Обновление статуса заявки пользователя в базе данных
cursor.execute("UPDATE users SET application_sent=1 WHERE tg_id=?", (message.from_user.id,))
conn.commit()
# Удаление кнопки "Проверить"
keyboard = types.ReplyKeyboardRemove()
bot.send_message(message.chat.id, "Мы уведомили админа. Ожидайте.", reply_markup=keyboard)
else:
bot.send_message(message.chat.id, "Мы уже уведомили админа. Ожидайте!")
@bot.message_handler(func=lambda message: message.text == "Назад")
def back_button_command(message):
# Создание клавиатуры с кнопками
keyboard = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True)
button1 = types.KeyboardButton("Чат команды")
button2 = types.KeyboardButton("Мануал для новичков")
keyboard.add(button1, button2)
# Отправка сообщения с клавиатурой
bot.send_message(message.chat.id, "Выбери одну из опций:", reply_markup=keyboard)
# Обработчик нажатия на кнопку "Мануал для новичков"
@bot.message_handler(func=lambda message: message.text == "Мануал для новичков")
def newbie_manual_command(message):
# Отправка ссылки на мануал для новичков
manual_link = "https://t.me/+2N-xPdAwfk0xZGMy"
bot.send_message(message.chat.id, f"Прочитайте мануал для новичков.\n\nЕсли останутся вопросы - обращайтесь к @scamswat\n\n{manual_link}", disable_web_page_preview=True)
# Обработчик команды /update
@bot.message_handler(commands=['update'])
def update_command(message):
# Проверка, является ли отправитель администратором
if str(message.chat.id) not in map(str, admin_chat_id):
bot.reply_to(message, "У вас нет доступа к этой команде.")
return
# Получение списка пользователей
users = get_users()
# Обновление информации о пользователях в базе данных
for user_id, username, tg_id, _ in users:
try:
user = bot.get_chat(tg_id)
if user.username:
new_username = user.username
if username != new_username: # Проверка изменения username
update_user_info(tg_id, new_username)
except telebot.apihelper.ApiException:
pass # Обработка ошибки, если пользователь удален или заблокирован
bot.send_message(message.chat.id, "Информация о пользователях успешно обновлена.")
# Обработчик команды /users
@bot.message_handler(commands=['users'])
def users_command(message):
# Проверка, является ли отправитель администратором
if str(message.chat.id) not in map(str, admin_chat_id):
bot.reply_to(message, "У вас нет доступа к этой команде.")
return
# Получение списка пользователей
users = get_users()
# Отправка списка пользователей
if len(users) > 0:
response = "Список пользователей:\n"
for i, (id, username, tg_id, application_sent) in enumerate(users, 1):
response += f"{i}. | @{username} | {tg_id} | {'отправил заявку' if application_sent else 'не отправил заявку'}\n"
bot.send_message(message.chat.id, response)
else:
bot.send_message(message.chat.id, "Список пользователей пуст.")
# Обработчик новых сообщений в Panda Project Выплатах
@bot.channel_post_handler(func=lambda message: message.chat.id == -1001861465135) # ID канала
def channel_message_handler(message):
# Проверка упоминаний пользователей из базы данных
mentioned_users = get_users()
for user in mentioned_users:
username = user[1]
tg_id = user[2]
mention = f"@{username}"
id = f"{tg_id}"
if mention in message.text:
# Отправка дубликата сообщения администраторам бота
for admin_id in admin_chat_id:
bot.send_message(admin_id, f"Упоминание {mention} с tg_id {id} в Panda Project Выплатах:\n\n{message.text}")
# Запуск бота
bot.polling()