Add new ban rules

This commit is contained in:
Rykov7
2023-09-02 19:06:37 +03:00
parent 7a3c78d813
commit 3248bb6842
7 changed files with 121 additions and 37 deletions
@@ -0,0 +1,24 @@
"""add permissions
Revision ID: 1b1f99b95b38
Revises: 9d160884887c
Create Date: 2023-07-30 18:33:35.400071
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '1b1f99b95b38'
down_revision = '9d160884887c'
branch_labels = None
depends_on = None
def upgrade() -> None:
pass
def downgrade() -> None:
pass
-28
View File
@@ -1,28 +0,0 @@
from telebot.types import LabeledPrice, Message, PreCheckoutQuery
from ..config import YOOPAY, bot
prices = [LabeledPrice("Сумма", 100_00)]
@bot.message_handler(commands=["donate"])
def request_invoice(message: Message):
bot.send_invoice(
message.chat.id,
"Поддержать проект",
"Stan",
"donate_stan",
provider_token=YOOPAY,
currency="RUB",
prices=prices,
provider_data='{"capture": true}',
max_tip_amount=500_000_00,
suggested_tip_amounts=[150_00, 300_00, 500_00, 1_000_00],
capture=True,
)
@bot.pre_checkout_query_handler(func=lambda a: True)
def process_pre_checkout(q: PreCheckoutQuery):
bot.answer_pre_checkout_query(
q.id, True, "Извините, пожертвования больше не принимаем!"
)
+22 -1
View File
@@ -3,7 +3,7 @@
import logging
from telebot import logger
from datetime import datetime as dt
from ..models import Chat, Quote
from ..models import Chat, Quote, User
from ..database import session
from ..config import bot, ADMIN_ID, types
from .. import reminder
@@ -193,3 +193,24 @@ def set_logging_level(message: types.Message):
else:
logger.setLevel(20) # INFO
logging.info("[LEVEL] Установлен уровень INFO")
@bot.message_handler(func=is_admin, commands="promote", chat_types=["supergroup", "group"])
def promote_user(message: types.Message):
if message.reply_to_message:
user = message.reply_to_message.from_user
user_db = session.query(User).filter_by(tg_id=user.id)
if not user_db:
permission = 1
session.add(tg_id=user.id,
first_name=user.first_name,
last_name=user.last_name,
username=user.username,
permissions=permission)
else:
permission = user_db.permission * 2
user_db.update(permissions=permission)
session.commit()
logger.info(f'[{user.first_name} {user.last_name}] повышен до {permission}.')
+1 -1
View File
@@ -80,7 +80,7 @@ FAQ = types.InlineKeyboardButton(
LIB = types.InlineKeyboardButton("📚 Книги", url="https://telegra.ph/what-to-read-10-06")
SPAM = ["me.sv/", "tg.sv/", "goo.by/", "go.sv/", "intim.video/", "uclck.ru/", 'раб0т',
'0плат', ]
'0плат', 'Жду в ЛС!', 'новый способ заработка', 'криптовалют']
NON_GRATA = ["дудар", "хауди", "dudar"]
BAN_WORDS = ["GREEN"]
+2 -3
View File
@@ -7,12 +7,11 @@ def in_spam_list(message: types.Message) -> bool:
"""Check for mentioning unwanted persons in text."""
antispam_is_enabled = session.query(Chat.antispam).filter_by(chat_id=message.chat.id).first()[0]
if message.from_user.id not in WHITEIDS and antispam_is_enabled:
for url in SPAM:
if url in message.text.casefold():
for text in SPAM:
if text in message.text.casefold():
logging.info(
"!BAN!" + LOG_COMM % (
message.chat.title, message.from_user.id, message.from_user.first_name, message.text))
return True
+68
View File
@@ -1,8 +1,17 @@
from sqlalchemy import Column, String, Integer, Boolean, ForeignKey
from sqlalchemy.orm import relationship, declarative_base
from .database import session
Base = declarative_base()
class Permission:
USE_COMMANDS = 1 # Пользоваться обычными командами.
SEND_LINKS = 2 # Может отправлять ссылки без удаления.
MODIFY_QUOTES = 4 # Может добавлять и удалять цитаты.
MODERATE = 8
ADMIN = 16 # Может банить юзеров и удалять сообщения.
class Quote(Base):
__tablename__ = "quotes"
@@ -25,6 +34,65 @@ class Chat(Base):
antispam = Column(Boolean)
report = Column(Boolean)
reminder = Column(Boolean)
hidden = Column(Boolean)
def __repr__(self):
return f'Chat({self.chat_id=}, {self.title=})'
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
tg_id = Column(Integer, unique=True)
first_name = Column(String)
last_name = Column(String)
username = Column(String)
permissions = Column(Integer)
def __repr__(self):
return f'User({self.first_name} {self.last_name} {self.username})'
class Role(Base):
__tablename__ = 'roles'
id = Column(Integer, primary_key=True)
name = Column(String(64), unique=True)
default = Column(Boolean, default=False, index=True)
permissions = Column(Integer)
users = relationship('User', backref='role', lazy='dynamic')
def add_permission(self, perm):
if not self.has_permission(perm):
self.permissions += perm
def remove_permission(self, perm):
if self.has_permission(perm):
self.permissions -= perm
def reset_permissions(self):
self.permissions = 0
def has_permission(self, perm):
return self.permissions & perm == perm
@staticmethod
def insert_roles():
roles = {
"User": [Permission.USE_COMMANDS],
"Moderator": [Permission.USE_COMMANDS, Permission.SEND_LINKS,
Permission.MODIFY_QUOTES, Permission.MODERATE],
"Administrator": [Permission.USE_COMMANDS, Permission.SEND_LINKS,
Permission.MODIFY_QUOTES, Permission.MODERATE,
Permission.ADMIN],
}
default_role = 'User'
for r in roles:
role = Role.query.filter_by(name=r).first()
if role is None:
role = Role(name=r)
role.reset_permissions()
for perm in roles[r]:
role.add_permission(perm)
role.default = (role.name == default_role)
session.add(role)
session.commit()
+3 -3
View File
@@ -34,12 +34,12 @@ def create_report_text(chat_id):
top_users += f'\n{i + 1}. {name} [<code>{flooder["Count"]}</code>]'
if len(flooders) >= 3 or s["Banned"] or s["Deleted"]:
report = f"<code>Hello, World!</code>\n"
report = f"Hello, World!\n"
if len(flooders) >= 3:
report += f"\n<b>Топ</b> 🐍{top_users}\n"
report += f"\n{top_users}\n"
if s["Banned"] or s["Deleted"]:
report += f"""
<b>Заблокировано</b>
<b>Удалено</b>
├ Пользователей: <code>{s['Banned']}</code>
└ Сообщений: <code>{s['Deleted']}</code>
"""