Исходник Бот для телеграмма Moderator

MrApostolAngels

Новичок
Автор темы
14
4
Бот Moderator с управлением чата, участников.
Выдача рангов администрации взято под основу как у Iris

Установка бота

moder.py откройте в блокноте замените токен на свой!

Где взять токен?
Перейдите в бота @BotFather, создайте бота в нем и скопируйте ваш токен.

Запуск бота!

Распакуйте архив в любое для вас удобное место, установите последнию версию Python

Установите зависимости для бота в командной строке

pip install python-telegram-bot


пароль от архива: 123123
 

Вложения

  • moder.zip
    8.1 KB · Просмотры: 16

dask

Участник
98
12
Бот Moderator с управлением чата, участников.
Выдача рангов администрации взято под основу как у Iris

Установка бота

moder.py откройте в блокноте замените токен на свой!

Где взять токен?
Перейдите в бота @BotFather, создайте бота в нем и скопируйте ваш токен.

Запуск бота!

Распакуйте архив в любое для вас удобное место, установите последнию версию Python

Установите зависимости для бота в командной строке

pip install python-telegram-bot


пароль от архива: 123123
1762599262184.png
 
  • Нравится
Реакции: MrApostolAngels

vindarix

Известный
73
12
Отличный пример говнокода. Всё сделано через одно место.
Во-первых, вся логика и обработка команд свалены в один гигантский файл. Вместо нормального разделения на handlers.py, database.py, utils.py — там просто огромная плеяда десятков функций подряд, например:
Python:
async def show_admins(update, context):
async def promote_user(update, context):
async def demote_user(update, context):
Каждая из этих функций делает почти одно и то же, но код повторяется слово в слово.

Во-вторых, вместо СУБД используется JSON:
Python:
DATA_FILE = 'admin_system_data.json'

def load_data():
with open(DATA_FILE, 'r') as f:
return json.load(f)
и потом в десятках мест:
Python:
data = load_data()d
ata['admins'].append(user_id)
save_data(data)
При параллельных записях файл запросто повредится. Надо юзать SQLite или PostgreSQL.

Третье — асинхронность нарушена: код объявлен как async, но внутри есть блокирующие операции:
Python:
with open(DATA_FILE, 'w') as f:
json.dump(data, f)
Получаем блокировку event loop'а и торможение бота при любой записи.

К этому добавляем глобал переменные и хардкод по всему коду:
Python:
RANKS = ['Helper', 'Moderator', 'Admin', 'Owner']
TOKEN = '123456:ABC-DEF'
такое нельзя держать в коде, нужно выносить в переменные окружения.

Отдельно отмечу, что python-telegram-bot — не лучший выбор для такого бота. Он громоздкий, неудобен для масштабных ботов и плохо справляется с асинхронностью. Тут лучше юзать aiogram.

В итоге имеем:
1. Монолитный код без адекватной структуры
2. JSON вместо СУБД
3. Дублирование функций
4. Блокирующие вызовы в async-коде
5. Хардкод токенов и рангов
Проще будет реально переписать с нуля: сделать отдельный модуль для БД, разбить проект на файлы и настроить нормальные хендлеры.

P.s. пишу с телефона, поэтому мне лень расставлять табы в блоках с кодом
 
  • Нравится
Реакции: MrApostolAngels

MrApostolAngels

Новичок
Автор темы
14
4
Отличный пример говнокода. Всё сделано через одно место.
Во-первых, вся логика и обработка команд свалены в один гигантский файл. Вместо нормального разделения на handlers.py, database.py, utils.py — там просто огромная плеяда десятков функций подряд, например:
Python:
async def show_admins(update, context):
async def promote_user(update, context):
async def demote_user(update, context):
Каждая из этих функций делает почти одно и то же, но код повторяется слово в слово.

Во-вторых, вместо СУБД используется JSON:
Python:
DATA_FILE = 'admin_system_data.json'

def load_data():
with open(DATA_FILE, 'r') as f:
return json.load(f)
и потом в десятках мест:
Python:
data = load_data()d
ata['admins'].append(user_id)
save_data(data)
При параллельных записях файл запросто повредится. Надо юзать SQLite или PostgreSQL.

Третье — асинхронность нарушена: код объявлен как async, но внутри есть блокирующие операции:
Python:
with open(DATA_FILE, 'w') as f:
json.dump(data, f)
Получаем блокировку event loop'а и торможение бота при любой записи.

К этому добавляем глобал переменные и хардкод по всему коду:
Python:
RANKS = ['Helper', 'Moderator', 'Admin', 'Owner']
TOKEN = '123456:ABC-DEF'
такое нельзя держать в коде, нужно выносить в переменные окружения.

Отдельно отмечу, что python-telegram-bot — не лучший выбор для такого бота. Он громоздкий, неудобен для масштабных ботов и плохо справляется с асинхронностью. Тут лучше юзать aiogram.

В итоге имеем:
1. Монолитный код без адекватной структуры
2. JSON вместо СУБД
3. Дублирование функций
4. Блокирующие вызовы в async-коде
5. Хардкод токенов и рангов
Проще будет реально переписать с нуля: сделать отдельный модуль для БД, разбить проект на файлы и настроить нормальные хендлеры.

P.s. пишу с телефона, поэтому мне лень расставлять табы в блоках с кодом
Спасибо за предоставленную информацию! Учту следующий раз.