mirror of
https://github.com/SantaSpeen/RoyaltyIT-tg-bot.git
synced 2026-02-16 02:20:42 +00:00
Warns add
This commit is contained in:
@@ -1,14 +1,7 @@
|
|||||||
from peewee import Model, SqliteDatabase, IntegerField, DoubleField, DoesNotExist
|
from peewee import Model, SqliteDatabase, IntegerField, DoubleField, DoesNotExist
|
||||||
|
|
||||||
conn = SqliteDatabase('sqlite3.db')
|
|
||||||
|
|
||||||
|
class Users(Model):
|
||||||
class BaseModel(Model):
|
|
||||||
class Meta:
|
|
||||||
database = conn
|
|
||||||
|
|
||||||
|
|
||||||
class Users(BaseModel):
|
|
||||||
|
|
||||||
id = IntegerField(null=True)
|
id = IntegerField(null=True)
|
||||||
user_id = IntegerField()
|
user_id = IntegerField()
|
||||||
@@ -18,15 +11,4 @@ class Users(BaseModel):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
table_name = 'users'
|
table_name = 'users'
|
||||||
|
database = SqliteDatabase('sqlite3.db')
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
try:
|
|
||||||
user = Users.get(Users.id == 1)
|
|
||||||
except DoesNotExist:
|
|
||||||
user = Users(user_id=1)
|
|
||||||
|
|
||||||
user.warns += 1
|
|
||||||
user.save()
|
|
||||||
|
|
||||||
print("test:", user.warns)
|
|
||||||
|
|||||||
42
src/main.py
42
src/main.py
@@ -18,15 +18,16 @@ tools = Tools(config, dp)
|
|||||||
|
|
||||||
@dp.message_handler(commands=['admins'])
|
@dp.message_handler(commands=['admins'])
|
||||||
async def bot_admins(msg: types.Message):
|
async def bot_admins(msg: types.Message):
|
||||||
|
log.info(f"New message from {msg.from_user.id}({msg.from_user.username}) in {msg.chat.id}: '{msg.text}'")
|
||||||
message = "Администраторы нашего сообщества:\n%(owner)-s"
|
message = "Администраторы нашего сообщества:\n%(owner)-s"
|
||||||
admin_list = await bot.get_chat_administrators(config.remote_chat)
|
admins = await tools.admins
|
||||||
i = 1
|
i = 1
|
||||||
for admin_object in admin_list:
|
for admin_object in admins['list']:
|
||||||
user = admin_object['user']
|
user = admin_object['user']
|
||||||
status = admin_object['status'].replace("administrator", "Администратор").replace("creator", "Создатель:")
|
status = admin_object['status'].replace("administrator", "Администратор").replace("creator", "Создатель:")
|
||||||
if status == "Администратор":
|
if status == "Администратор":
|
||||||
if not user['is_bot']:
|
if not user['is_bot']:
|
||||||
message += f"`{i}. {status+':'}` `@{user['username']}`\n"
|
message += f"`{i}. {status + ':'}` `@{user['username']}`\n"
|
||||||
i += 1
|
i += 1
|
||||||
else:
|
else:
|
||||||
message %= {"owner": f"`0. {status:14}` `@{user['username']}`\n"}
|
message %= {"owner": f"`0. {status:14}` `@{user['username']}`\n"}
|
||||||
@@ -34,6 +35,41 @@ async def bot_admins(msg: types.Message):
|
|||||||
await msg.reply(message, parse_mode=ParseMode.MARKDOWN)
|
await msg.reply(message, parse_mode=ParseMode.MARKDOWN)
|
||||||
|
|
||||||
|
|
||||||
|
@dp.message_handler(regexp=r"\A(?:.|\/)(?:warn|пред)", is_chat_admin=True)
|
||||||
|
async def wanrs(msg: types.Message):
|
||||||
|
log.info(f"New message from {msg.from_user.id}({msg.from_user.username}) in {msg.chat.id}: '{msg.text}'")
|
||||||
|
reply_message = msg.reply_to_message
|
||||||
|
|
||||||
|
if reply_message:
|
||||||
|
warn_user = reply_message.from_user
|
||||||
|
user_id = warn_user.id
|
||||||
|
user_username = warn_user.username
|
||||||
|
|
||||||
|
message = await tools.add_warn(user_id, user_username, msg.chat.id)
|
||||||
|
|
||||||
|
else:
|
||||||
|
message = "Сначала надо выбрать пользователя."
|
||||||
|
|
||||||
|
await msg.reply(message, parse_mode=ParseMode.MARKDOWN)
|
||||||
|
|
||||||
|
|
||||||
|
@dp.message_handler(regexp=r"\A(?:.|\/)(?:reset|прости)", is_chat_admin=True)
|
||||||
|
async def unwarn(msg):
|
||||||
|
log.info(f"New message from {msg.from_user.id}({msg.from_user.username}) in {msg.chat.id}: '{msg.text}'")
|
||||||
|
reply_message = msg.reply_to_message
|
||||||
|
|
||||||
|
if reply_message:
|
||||||
|
warn_user = reply_message.from_user
|
||||||
|
user_id = warn_user.id
|
||||||
|
user_username = warn_user.username
|
||||||
|
|
||||||
|
message = await tools.reset_warn(user_id, user_username)
|
||||||
|
else:
|
||||||
|
message = "Сначала надо выбрать пользователя."
|
||||||
|
|
||||||
|
await msg.reply(message, parse_mode=ParseMode.MARKDOWN)
|
||||||
|
|
||||||
|
|
||||||
tools.bind_static_messages()
|
tools.bind_static_messages()
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|||||||
57
src/tools.py
57
src/tools.py
@@ -1,7 +1,10 @@
|
|||||||
import logging
|
import logging
|
||||||
|
import time
|
||||||
|
|
||||||
import aiogram
|
import aiogram
|
||||||
|
from peewee import DoesNotExist
|
||||||
|
|
||||||
|
from SqlModels import Users
|
||||||
from config import Config
|
from config import Config
|
||||||
|
|
||||||
static_log = logging.getLogger('static messages')
|
static_log = logging.getLogger('static messages')
|
||||||
@@ -13,6 +16,7 @@ class Tools:
|
|||||||
self.log = logging.getLogger("bot tools")
|
self.log = logging.getLogger("bot tools")
|
||||||
self.config = config
|
self.config = config
|
||||||
self.dispatcher = dispatcher
|
self.dispatcher = dispatcher
|
||||||
|
self.__admins: dict = {}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
async def __message_handler(msg: aiogram.types.Message, **kwargs):
|
async def __message_handler(msg: aiogram.types.Message, **kwargs):
|
||||||
@@ -35,3 +39,56 @@ class Tools:
|
|||||||
__messages_keys__ = list(__messages__.keys())
|
__messages_keys__ = list(__messages__.keys())
|
||||||
l = lambda *x: self.__message_handler(*x, __messages__=__messages__)
|
l = lambda *x: self.__message_handler(*x, __messages__=__messages__)
|
||||||
self.dispatcher.register_message_handler(l, commands=__messages_keys__)
|
self.dispatcher.register_message_handler(l, commands=__messages_keys__)
|
||||||
|
|
||||||
|
async def _update_admins_list(self):
|
||||||
|
admins = await self.dispatcher.bot.get_chat_administrators(self.config.remote_chat)
|
||||||
|
ids = list()
|
||||||
|
for admin in admins:
|
||||||
|
ids.append(admin['user']['id'])
|
||||||
|
self.__admins = {
|
||||||
|
"time": time.time()+60.0,
|
||||||
|
"object": {"list": admins, "ids": ids}
|
||||||
|
}
|
||||||
|
|
||||||
|
@property
|
||||||
|
async def admins(self):
|
||||||
|
if not self.__admins:
|
||||||
|
await self._update_admins_list()
|
||||||
|
elif time.time() >= self.__admins.get("time"):
|
||||||
|
await self._update_admins_list()
|
||||||
|
|
||||||
|
return self.__admins['object']
|
||||||
|
|
||||||
|
async def add_warn(self, user_id, user_username, chat_id):
|
||||||
|
try:
|
||||||
|
user = Users.get(Users.user_id == user_id)
|
||||||
|
except DoesNotExist:
|
||||||
|
user = Users(user_id=user_id)
|
||||||
|
user.warns += 1
|
||||||
|
user.save()
|
||||||
|
if user.warns > 3:
|
||||||
|
try:
|
||||||
|
await self.dispatcher.bot.kick_chat_member(chat_id, user_id)
|
||||||
|
message = f"@{user_username} вёл себя плохо, поэтому теперь он иключён!"
|
||||||
|
except Exception as e:
|
||||||
|
message = f"Ошибка при исключении @{user_username}.\nException: `{e}`"
|
||||||
|
else:
|
||||||
|
message = f"@{user_username}, вы получили {user.warns} из 3 предупреждений.\nВпредь ведите себя лучше!"
|
||||||
|
|
||||||
|
return message
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
async def reset_warn(cls, user_id, username):
|
||||||
|
try:
|
||||||
|
user = Users.get(Users.user_id == user_id)
|
||||||
|
except DoesNotExist:
|
||||||
|
user = Users(user_id=user_id)
|
||||||
|
|
||||||
|
if user.warns == 0:
|
||||||
|
message = f"У пользователя @{username} нет предупреждений!"
|
||||||
|
else:
|
||||||
|
message = f"Извини @{username}...\nТеперь у тебя 0 из 3 предупреждений."
|
||||||
|
user.warns = 0
|
||||||
|
user.save()
|
||||||
|
|
||||||
|
return message
|
||||||
|
|||||||
Reference in New Issue
Block a user