From e316279f38e95bdc65c22aed2a431e6627316f03 Mon Sep 17 00:00:00 2001 From: hok7z Date: Sat, 22 Jul 2023 14:07:43 +0300 Subject: [PATCH] Format code to PEP8 & other small changes --- .env.dist | 10 +++++----- README.md | 2 +- app.py | 2 +- config/config.py | 7 +++---- database.py | 34 ++++++++++++++++++---------------- load.py | 4 ++-- utils/command_parser.py | 19 +++++++++++-------- utils/notify_start.py | 6 ++++-- utils/parse_timedelta.py | 6 +++--- utils/telegram_client.py | 16 ++++++++-------- 10 files changed, 56 insertions(+), 50 deletions(-) diff --git a/.env.dist b/.env.dist index 787f75f..c89f57e 100644 --- a/.env.dist +++ b/.env.dist @@ -1,13 +1,13 @@ bot_token = "" -api_id = "" -api_hash = "" +api_id = "" +api_hash = "" -group_id = "" +group_id = "" second_group_id = "" -telegram_api_server = "127.0.0.1:5326" -db_url = "sqlite://db.db" +telegram_api_server = "http://127.0.0.1:5326" +db_uri = "sqlite://db.db" limit_of_warns = 5 diff --git a/README.md b/README.md index 3624b66..dc4deff 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ This bot is designed to simplify the moderation and management of Telegram group | `group_id` | group id | | `second_group_id` | seconds group for admins | | `telegram_bot_api_server` | telegram bot api server | -| `db_url` | connection info to database | +| `db_uri` | connection info to database | | `limit_of_warns` | limit user warnings | | `update_interval` | interval for update of user data | diff --git a/app.py b/app.py index cb74c48..0cb265a 100755 --- a/app.py +++ b/app.py @@ -22,7 +22,7 @@ WEBAPP_PORT = 3001 # Don`t touch anything! WEBHOOK_HOST = f'http://{WEBAPP_HOST}:{WEBAPP_PORT}' -WEBHOOK_PATH = f'/bot{config.token}/' +WEBHOOK_PATH = f'/bot{config.bot_token}/' WEBHOOK_URL = f"{WEBHOOK_HOST}{WEBHOOK_PATH}" diff --git a/config/config.py b/config/config.py index dd46b34..83faaf8 100644 --- a/config/config.py +++ b/config/config.py @@ -8,7 +8,7 @@ env.read_env() USE_WEBHOOK = True # bot token -token = env.str("bot_token") +bot_token = env.str("bot_token") group_id = env.int("group_id") second_group_id = env.int("second_group_id") @@ -33,7 +33,6 @@ group_permissions = { "can_pin_messages": False } -db_url = env.str("db_url") +db_uri = env.str("db_uri") -telegram_api_server = env.str("telegram_api_server").split(":") -telegram_api_server = f"http://{telegram_api_server[0]}:{telegram_api_server[1]}" +telegram_api_server = env.str("telegram_api_server") diff --git a/database.py b/database.py index da8039d..b1c20ad 100644 --- a/database.py +++ b/database.py @@ -1,43 +1,45 @@ -from peewee import Field, Model, BigIntegerField, CharField, DateField, DateTimeField, ForeignKeyField +from peewee import CharField, BigIntegerField, DateField, DateTimeField, ForeignKeyField +from enum import Enum import config from playhouse.db_url import connect from datetime import datetime, date +from peewee import Model + +db = connect(config.db_uri) -db = connect(config.db_url) - -from enum import Enum class MemberRoles(Enum): - OWNER = "owner" - ADMIN = "admin" + OWNER = "owner" + ADMIN = "admin" HELPER = "helper" MEMBER = "member" + class Member(Model): - user_id = BigIntegerField() + user_id = BigIntegerField() first_name = CharField() - username = CharField(null=True) + username = CharField(null=True) role = CharField(default="member") warns = BigIntegerField(default=0) - joined = DateField(default=date.today()) - + joined = DateField(default=date.today()) class Meta: db_table = "members" database = db -class Restriction(Model): - from_user = ForeignKeyField(Member, lazy_load=True) - to_user = ForeignKeyField(Member, lazy_load=True) - text = CharField() - message_id = BigIntegerField() - timestamp = DateTimeField(default=datetime.now().replace(microsecond=0)) +class Restriction(Model): + from_user = ForeignKeyField(Member, lazy_load=True) + to_user = ForeignKeyField(Member, lazy_load=True) + + text = CharField() + message_id = BigIntegerField() + timestamp = DateTimeField(default=datetime.now().replace(microsecond=0)) class Meta: db_table = "auditlog" diff --git a/load.py b/load.py index b7f5722..ea9a0be 100644 --- a/load.py +++ b/load.py @@ -13,7 +13,7 @@ import utils storage = MemoryStorage() # Create client connection -tgc = utils.TelegramClient(config.api_id, config.api_hash, config.token) +tgc = utils.TelegramClient(config.api_id, config.api_hash, config.bot_token) scheduler = AsyncIOScheduler() @@ -22,7 +22,7 @@ session = AiohttpSession( ) bot = Bot( - token=config.token, + token=config.bot_token, session=session, parse_mode="Markdown" ) diff --git a/utils/command_parser.py b/utils/command_parser.py index fd6faa5..dd04bd1 100644 --- a/utils/command_parser.py +++ b/utils/command_parser.py @@ -1,11 +1,19 @@ -import typing +from typing import Optional from dataclasses import dataclass from database import Member from load import types -def get_argument(arguments:list,index:int=0) -> typing.Optional[str]: +@dataclass +class CommandArguments: + to_user: Optional[Member] + from_user: Optional[Member] + arguments: list + is_silent: bool + + +def get_argument(arguments: list, index: int = 0) -> Optional[str]: """ Get element from a list.If element not exist return None """ if not (arguments): return None @@ -15,12 +23,7 @@ def get_argument(arguments:list,index:int=0) -> typing.Optional[str]: else: return None -@dataclass -class CommandArguments: - to_user:Member | None - from_user:Member | None - arguments:list - is_silent:bool + async def get_command_args(message: types.Message) -> CommandArguments: """Describe user data and arguments from message""" diff --git a/utils/notify_start.py b/utils/notify_start.py index 8510a49..b3d3cfa 100644 --- a/utils/notify_start.py +++ b/utils/notify_start.py @@ -2,15 +2,17 @@ import config from database import Member, Restriction from database import db + def database_is_empty(): if not db.get_columns("members"): db.create_tables([Member, Restriction]) return True elif not Member.select().count(): - return True + return True return False + async def notify_started_bot(bot): - await bot.send_message(config.second_group_id,"Bot successfully launched!") + await bot.send_message(config.second_group_id, "Bot successfully launched!") diff --git a/utils/parse_timedelta.py b/utils/parse_timedelta.py index 59ccde1..f35d34b 100644 --- a/utils/parse_timedelta.py +++ b/utils/parse_timedelta.py @@ -1,11 +1,11 @@ import re -import typing +from typing import Optional import datetime from load import types -def parse_timedelta(value: str) -> typing.Optional[datetime.timedelta]: +def parse_timedelta(value: str) -> Optional[datetime.timedelta]: regex = r'(?:(\d+)(?:d|д))?(?:(\d+)(?:h|ч))?(?:(\d+)(?:m|м))?(?:(\d+)(?:s|с))?' specification = value.strip().replace(' ', '') match = re.fullmatch(regex, specification) @@ -19,7 +19,7 @@ def parse_timedelta(value: str) -> typing.Optional[datetime.timedelta]: ) -def parse_timedelta_from_message(message: types.Message) -> typing.Optional[datetime.timedelta]: +def parse_timedelta_from_message(message: types.Message) -> Optional[datetime.timedelta]: _, *args = message.text.split() if args: diff --git a/utils/telegram_client.py b/utils/telegram_client.py index 1948471..c77a801 100644 --- a/utils/telegram_client.py +++ b/utils/telegram_client.py @@ -2,17 +2,17 @@ from pyrogram.client import Client class TelegramClient: - def __init__(self,api_id,api_hash,token): + def __init__(self, api_id, api_hash, token): self.api_id = api_id self.api_hash = api_hash self.token = token self.client = Client("session", - api_id=self.api_id,api_hash=self.api_hash, + api_id=self.api_id, api_hash=self.api_hash, bot_token=self.token ) - async def members_list(self,chat_id:int): + async def members_list(self, chat_id: int): members = [] async for member in self.client.get_chat_members(chat_id): @@ -27,10 +27,10 @@ class TelegramClient: if (not member.user.is_bot): members.append({ - "id":member.user.id, - "status":str(member.status), - "first_name":member.user.first_name, - "username":username, - }) + "id": member.user.id, + "status": str(member.status), + "first_name": member.user.first_name, + "username": username, + }) return members