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
-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()
+4 -4
View File
@@ -31,15 +31,15 @@ def create_report_text(chat_id):
if user.last_name
else user.first_name
)
top_users += f'\n {i + 1}. {name} [<code>{flooder["Count"]}</code>]'
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>
"""