Добавим команду !добавить админа. Ее можно будет писать только в группе, и сможет ее писать только администратор, который имеет право назначать других администратором. В ответ она отправляет такое сообщение:

"✔️ | Указанный пользователь назначен администратором, и сможет проводить чистки."

Если прав нету в ответ:

"❌ | Недостаточно прав. Вы должны иметь право "Добавление администраторов"."

Так-же есть команда !удалить админа, снова же, ее можно будет писать только в группе, и сможет ее писать только администратор, который имеет право назначать других администратором. 

В ответ она отправляет такое сообщение:

"✔️ | Указанный пользователь удален из администраторов, и не сможет проводить чистки."

Если прав нету в ответ:

"❌ | Недостаточно прав. Вы должны иметь право "Добавление администраторов"."

Данный статус привязан к человеку и группе. Он в будущем нам понадобится.

import sqlite3
import telebot
from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton
from tokes import TOKEN

# Инициализация бота
bot = telebot.TeleBot(TOKEN)

# Инициализация базы данных
DB_NAME = "groups.db"

def init_db():
    with sqlite3.connect(DB_NAME) as conn:
        cursor = conn.cursor()
        # Таблица групп
        cursor.execute("""
            CREATE TABLE IF NOT EXISTS groups (
                group_id INTEGER PRIMARY KEY,
                total_messages INTEGER DEFAULT 0
            )
        """)
        # Таблица участников
        cursor.execute("""
            CREATE TABLE IF NOT EXISTS members (
                group_id INTEGER,
                user_id INTEGER,
                firstname TEXT,
                messages INTEGER DEFAULT 0,
                PRIMARY KEY (group_id, user_id)
            )
        """)
    print("База данных инициализирована.")

init_db()

@bot.message_handler(commands=['start'])
def start_command(message):
    # Проверяем, что команда отправлена в личных сообщениях, а не в группе
    if message.chat.type == 'private':
        # Текст сообщения
        start_text = (
            "[Made by Xaris and Oluni_Official for helping flood's | Сделано Xaris и Oluni_Official для помощи флудам]\n\n"
            "Здравствуйте всем, кто решил пользоваться нашим ботом. Запомните: Бот никак не связан с Ирисом, тоесть, "
            "его нужно добавлять с момента начала отчета чистки. После чистки. Чистка - удаление неактивных игроков. "
            "Т.к он имеет свое хранение сообщений за некий период времени. При первом добавлении в группу, вам нужно "
            "будет его настроить. Для большей информации о установке, нажмите на кнопку ниже."
        )
        
        # Создание инлайн-клавиатуры
        markup = InlineKeyboardMarkup()
        add_to_group_button = InlineKeyboardButton("💎 | Добавить в группу", url="https://t.me/YourBotUsername?startgroup=true")
        instructions_button = InlineKeyboardButton("🔋 | Инструкция об установке", callback_data="instructions")
        markup.add(add_to_group_button, instructions_button)
        
        # Отправка сообщения с клавиатурой
        bot.send_message(chat_id=message.chat.id, text=start_text, reply_markup=markup)

# Обработчик инлайн-кнопки "Инструкция об установке"
@bot.callback_query_handler(func=lambda call: call.data == "instructions")
def send_instructions(call):
    instructions_text = "Инструкция по установке: ... (тут вы можете добавить инструкцию позже)."
    bot.answer_callback_query(call.id, text="Информация об установке!")
    bot.send_message(chat_id=call.message.chat.id, text=instructions_text)

# Увеличение сообщений участника
def increment_message(group_id, user_id, firstname):
    with sqlite3.connect(DB_NAME) as conn:
        cursor = conn.cursor()
        # Добавление группы, если ее нет
        cursor.execute("INSERT OR IGNORE INTO groups (group_id) VALUES (?)", (group_id,))
        # Добавление участника, если его нет
        cursor.execute("""
            INSERT OR IGNORE INTO members (group_id, user_id, firstname) 
            VALUES (?, ?, ?)
        """, (group_id, user_id, firstname))
        # Обновление количества сообщений
        cursor.execute("""
            UPDATE members 
            SET messages = messages + 1 
            WHERE group_id = ? AND user_id = ?
        """, (group_id, user_id))
        # Обновление общего количества сообщений в группе
        cursor.execute("""
            UPDATE groups 
            SET total_messages = total_messages + 1 
            WHERE group_id = ?
        """, (group_id,))
    conn.commit()

# Получение топа участников
def get_top_members(group_id):
    with sqlite3.connect(DB_NAME) as conn:
        cursor = conn.cursor()
        # Получение участников и их сообщений
        cursor.execute("""
            SELECT firstname, messages, user_id 
            FROM members 
            WHERE group_id = ? 
            ORDER BY messages DESC 
            LIMIT 50
        """, (group_id,))
        members = cursor.fetchall()
        # Получение общего количества сообщений
        cursor.execute("SELECT total_messages FROM groups WHERE group_id = ?", (group_id,))
        total_messages = cursor.fetchone()
        total_messages = total_messages[0] if total_messages else 0
    return members, total_messages

# Обработчик добавления бота в группу
@bot.message_handler(content_types=['new_chat_members'])
def new_chat_member_handler(message):
    for new_member in message.new_chat_members:
        if new_member.is_bot and new_member.username == bot.get_me().username:
            group_id = message.chat.id
            # Приветственное сообщение
            welcome_text = (
                "📣 | Бот зашел в группу.\n"
                f"⚙️ | Бот не нашел информации о настройках данной группы. Если это ошибка, обратитесь к администратору, айди группы: {group_id}.\n"
                "Айди нужен для проверки группы. Если это не ошибка, то посмотрите инструкцию и настройте бота.\n\n"
                "⚠️ | *Предупреждение!* Все сообщения, что будут написаны до полной настройки бота, не будут защитаны ботом."
            )
            bot.send_message(chat_id=group_id, text=welcome_text, parse_mode='Markdown')

            # Проверка админских прав
            bot_permissions = bot.get_chat_member(group_id, bot.get_me().id).status
            if bot_permissions != "administrator":
                bot.send_message(
                    chat_id=group_id,
                    text="⚠️ *Предупреждение* | У бота нету прав администратора. Он не может читать сообщения и нормально функционировать.",
                    parse_mode='Markdown'
                )

# Обработчик текстовых сообщений
@bot.message_handler(content_types=['text', 'photo', 'sticker', 'video', 'animation', 'document'])
def count_messages(message):
    # Если это текстовое сообщение, проверяем команды
    if message.content_type == 'text' and message.text.lower() in ['!топ', '!атоп']:
        top_command(message)
    else:
        # Увеличиваем счетчик сообщений для всех типов контента
        increment_message(
            group_id=message.chat.id,
            user_id=message.from_user.id,
            firstname=message.from_user.first_name
        )

# Обработчик команды !Топ и !аТоп
def top_command(message):
    group_id = message.chat.id
    members, total_messages = get_top_members(group_id)

    if not members:
        bot.send_message(chat_id=group_id, text="🔰 | Нет данных для отображения топа.")
        return

    top_text = "🔰 | Весь топ за время, когда бот был добавлен:\n\n"
    for member in members:
        firstname, messages, user_id = member
        top_text += f"[{firstname}](tg://user?id={user_id}) - {messages} 💬\n"

    top_text += f"\n💠 | Всего сообщений: {total_messages}."
    bot.send_message(chat_id=group_id, text=top_text, parse_mode='Markdown')

# Запуск бота
if __name__ == "__main__":
    print("Бот запущен!")
    bot.polling(none_stop=True)