Add new ban rules
This commit is contained in:
@@ -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
|
||||||
@@ -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
@@ -3,7 +3,7 @@
|
|||||||
import logging
|
import logging
|
||||||
from telebot import logger
|
from telebot import logger
|
||||||
from datetime import datetime as dt
|
from datetime import datetime as dt
|
||||||
from ..models import Chat, Quote
|
from ..models import Chat, Quote, User
|
||||||
from ..database import session
|
from ..database import session
|
||||||
from ..config import bot, ADMIN_ID, types
|
from ..config import bot, ADMIN_ID, types
|
||||||
from .. import reminder
|
from .. import reminder
|
||||||
@@ -193,3 +193,24 @@ def set_logging_level(message: types.Message):
|
|||||||
else:
|
else:
|
||||||
logger.setLevel(20) # INFO
|
logger.setLevel(20) # INFO
|
||||||
logging.info("[LEVEL] Установлен уровень 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
@@ -80,7 +80,7 @@ FAQ = types.InlineKeyboardButton(
|
|||||||
LIB = types.InlineKeyboardButton("📚 Книги", url="https://telegra.ph/what-to-read-10-06")
|
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т',
|
SPAM = ["me.sv/", "tg.sv/", "goo.by/", "go.sv/", "intim.video/", "uclck.ru/", 'раб0т',
|
||||||
'0плат', ]
|
'0плат', 'Жду в ЛС!', 'новый способ заработка', 'криптовалют']
|
||||||
NON_GRATA = ["дудар", "хауди", "dudar"]
|
NON_GRATA = ["дудар", "хауди", "dudar"]
|
||||||
BAN_WORDS = ["GREEN"]
|
BAN_WORDS = ["GREEN"]
|
||||||
|
|
||||||
|
|||||||
+2
-3
@@ -7,12 +7,11 @@ def in_spam_list(message: types.Message) -> bool:
|
|||||||
"""Check for mentioning unwanted persons in text."""
|
"""Check for mentioning unwanted persons in text."""
|
||||||
antispam_is_enabled = session.query(Chat.antispam).filter_by(chat_id=message.chat.id).first()[0]
|
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:
|
if message.from_user.id not in WHITEIDS and antispam_is_enabled:
|
||||||
for url in SPAM:
|
for text in SPAM:
|
||||||
if url in message.text.casefold():
|
if text in message.text.casefold():
|
||||||
logging.info(
|
logging.info(
|
||||||
"!BAN!" + LOG_COMM % (
|
"!BAN!" + LOG_COMM % (
|
||||||
message.chat.title, message.from_user.id, message.from_user.first_name, message.text))
|
message.chat.title, message.from_user.id, message.from_user.first_name, message.text))
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,17 @@
|
|||||||
from sqlalchemy import Column, String, Integer, Boolean, ForeignKey
|
from sqlalchemy import Column, String, Integer, Boolean, ForeignKey
|
||||||
from sqlalchemy.orm import relationship, declarative_base
|
from sqlalchemy.orm import relationship, declarative_base
|
||||||
|
|
||||||
|
from .database import session
|
||||||
|
|
||||||
Base = declarative_base()
|
Base = declarative_base()
|
||||||
|
|
||||||
|
class Permission:
|
||||||
|
USE_COMMANDS = 1 # Пользоваться обычными командами.
|
||||||
|
SEND_LINKS = 2 # Может отправлять ссылки без удаления.
|
||||||
|
MODIFY_QUOTES = 4 # Может добавлять и удалять цитаты.
|
||||||
|
MODERATE = 8
|
||||||
|
ADMIN = 16 # Может банить юзеров и удалять сообщения.
|
||||||
|
|
||||||
|
|
||||||
class Quote(Base):
|
class Quote(Base):
|
||||||
__tablename__ = "quotes"
|
__tablename__ = "quotes"
|
||||||
@@ -25,6 +34,65 @@ class Chat(Base):
|
|||||||
antispam = Column(Boolean)
|
antispam = Column(Boolean)
|
||||||
report = Column(Boolean)
|
report = Column(Boolean)
|
||||||
reminder = Column(Boolean)
|
reminder = Column(Boolean)
|
||||||
|
hidden = Column(Boolean)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f'Chat({self.chat_id=}, {self.title=})'
|
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
@@ -34,12 +34,12 @@ def create_report_text(chat_id):
|
|||||||
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"]:
|
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:
|
if len(flooders) >= 3:
|
||||||
report += f"\n<b>Топ</b> 🐍{top_users}\n"
|
report += f"\n{top_users}\n"
|
||||||
if s["Banned"] or s["Deleted"]:
|
if s["Banned"] or s["Deleted"]:
|
||||||
report += f"""
|
report += f"""
|
||||||
<b>Заблокировано</b>
|
<b>Удалено</b>
|
||||||
├ Пользователей: <code>{s['Banned']}</code>
|
├ Пользователей: <code>{s['Banned']}</code>
|
||||||
└ Сообщений: <code>{s['Deleted']}</code>
|
└ Сообщений: <code>{s['Deleted']}</code>
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user