Compare commits

..

1 Commits

Author SHA1 Message Date
f43036cdaf Update dependency libbot to v3.2.1 2024-05-26 19:02:54 +03:00
16 changed files with 46 additions and 109 deletions

View File

@@ -2,16 +2,5 @@
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:base"
],
"packageRules": [
{
"matchUpdateTypes": [
"minor",
"patch",
"pin",
"digest"
],
"automerge": true
}
]
}

View File

@@ -1,13 +1,12 @@
import logging
from dataclasses import dataclass
from logging import Logger
from typing import Union
from bson import ObjectId
from modules.database_mongo import col_users
from modules.logging_utils import get_logger
logger: Logger = get_logger(__name__)
logger = logging.getLogger(__name__)
@dataclass

View File

@@ -3,9 +3,8 @@ from dataclasses import dataclass
from typing import Union
from modules.database_sqlite import cursor
from modules.logging_utils import get_logger
logger: logging.Logger = get_logger(__name__)
logger = logging.getLogger(__name__)
@dataclass
@@ -31,12 +30,16 @@ class PyroUser:
### Returns:
* `PyroUser`: User with its database data.
"""
db_entry = cursor.execute("SELECT id, locale FROM users WHERE id = ?", (id,)).fetchone()
db_entry = cursor.execute(
"SELECT id, locale FROM users WHERE id = ?", (id,)
).fetchone()
if db_entry is None:
cursor.execute("INSERT INTO users VALUES (?, ?)", (id, locale))
cursor.connection.commit()
db_entry = cursor.execute("SELECT id, locale FROM users WHERE id = ?", (id,)).fetchone()
db_entry = cursor.execute(
"SELECT id, locale FROM users WHERE id = ?", (id,)
).fetchone()
if db_entry is None:
raise RuntimeError("Could not find inserted user entry.")

View File

@@ -10,7 +10,6 @@
},
"commands": {
"start": "Start using the bot",
"shutdown": "Turn off the bot",
"language": "Change bot's language",
"remove_commands": "Unregister all commands"
},

View File

@@ -9,7 +9,6 @@
},
"commands": {
"start": "Почати користуватись ботом",
"shutdown": "Вимкнути бота",
"language": "Змінити мову бота",
"remove_commands": "Видалити всі команди"
},

28
main.py
View File

@@ -1,17 +1,14 @@
import contextlib
import logging.config
import logging
from argparse import ArgumentParser
from logging import Logger
from os import getpid, makedirs
from os import getpid
from pathlib import Path
from sys import exit
from libbot.utils import json_read
from libbot import sync
from classes.pyroclient import PyroClient
from modules.logging_utils import get_logger, get_logging_config
# Main uses MongoDB implementation of DB,
# Main uses MongoDB implementation of DB
# but you can also select SQLite one below
# from modules.migrator_sqlite import migrate_database
from modules.migrator_mongo import migrate_database
@@ -24,11 +21,13 @@ from modules.scheduler import scheduler
# from convopyro import Conversation
makedirs(Path("logs/"), exist_ok=True)
logging.basicConfig(
level=logging.DEBUG if sync.config_get("debug") else logging.INFO,
format="%(name)s.%(funcName)s | %(levelname)s | %(message)s",
datefmt="[%X]",
)
logging.config.dictConfig(get_logging_config())
logger: Logger = get_logger(__name__)
logger = logging.getLogger(__name__)
parser = ArgumentParser(
prog="__name__",
@@ -53,16 +52,15 @@ def main():
logger.info("Migration finished. Exiting...")
exit()
client = PyroClient(scheduler=scheduler, commands_source=json_read(Path("commands.json")))
client = PyroClient(
scheduler=scheduler, commands_source=sync.json_read(Path("commands.json"))
)
# Conversation(client)
try:
client.run()
except KeyboardInterrupt:
logger.warning("Forcefully shutting down with PID %s...", getpid())
except Exception as exc:
logger.error("An unexpected exception has occurred: %s", exc, exc_info=exc)
exit(1)
finally:
if client.scheduler is not None:
client.scheduler.shutdown()

View File

@@ -3,7 +3,7 @@
from typing import Any, Mapping
from async_pymongo import AsyncClient, AsyncCollection, AsyncDatabase
from libbot.utils import config_get
from libbot.sync import config_get
db_config: Mapping[str, Any] = config_get("database")
@@ -16,7 +16,9 @@ if db_config["user"] is not None and db_config["password"] is not None:
db_config["name"],
)
else:
con_string = "mongodb://{0}:{1}/{2}".format(db_config["host"], db_config["port"], db_config["name"])
con_string = "mongodb://{0}:{1}/{2}".format(
db_config["host"], db_config["port"], db_config["name"]
)
db_client = AsyncClient(con_string)
db: AsyncDatabase = db_client.get_database(name=db_config["name"])

View File

@@ -3,7 +3,7 @@
import sqlite3
from pathlib import Path
from libbot.utils import config_get
from libbot.sync import config_get
db: sqlite3.Connection = sqlite3.connect(Path(config_get("database")))
cursor: sqlite3.Cursor = db.cursor()

View File

@@ -1,35 +0,0 @@
import logging
from logging import Logger
from pathlib import Path
from typing import Any, Dict
from libbot.utils import config_get
def get_logging_config() -> Dict[str, Any]:
return {
"version": 1,
"disable_existing_loggers": False,
"handlers": {
"file": {
"class": "logging.handlers.RotatingFileHandler",
"filename": str(Path("logs/latest.log")),
"maxBytes": 500000,
"backupCount": 10,
"formatter": "simple",
},
"console": {"class": "logging.StreamHandler", "formatter": "systemd"},
},
"formatters": {
"simple": {"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"},
"systemd": {"format": "%(name)s - %(levelname)s - %(message)s"},
},
"root": {
"level": "DEBUG" if config_get("debug") else "INFO",
"handlers": ["file", "console"],
},
}
def get_logger(name: str) -> Logger:
return logging.getLogger(name)

View File

@@ -1,6 +1,6 @@
from typing import Any, Mapping
from libbot.utils import config_get
from libbot.sync import config_get
from mongodb_migrations.cli import MigrationManager
from mongodb_migrations.config import Configuration

View File

@@ -2,7 +2,7 @@ from os import rename
from pathlib import Path
from typing import Mapping
from libbot.utils import json_read
from libbot.sync import json_read
from modules.database_sqlite import cursor
@@ -18,7 +18,9 @@ def migrate_database() -> None:
user_locale = None if "locale" not in keys else keys["locale"]
user_card = None if "card" not in keys else keys["card"]
cursor.execute("INSERT INTO users VALUES (?, ?)", (int(user), user_card, user_locale))
cursor.execute(
"INSERT INTO users VALUES (?, ?)", (int(user), user_card, user_locale)
)
cursor.connection.commit()
rename(Path("data/database.json"), Path("data/database.migrated.json"))

View File

@@ -6,4 +6,6 @@ from classes.pyroclient import PyroClient
@PyroClient.on_callback_query(filters.regex("nothing")) # type: ignore
async def callback_nothing(app: PyroClient, callback: CallbackQuery):
await callback.answer(text=app._("nothing", "callbacks", locale=callback.from_user.language_code))
await callback.answer(
text=app._("nothing", "callbacks", locale=callback.from_user.language_code)
)

View File

@@ -8,4 +8,6 @@ from classes.pyroclient import PyroClient
~filters.scheduled & filters.private & filters.command(["start"], prefixes=["/"]) # type: ignore
)
async def command_start(app: PyroClient, message: Message):
await message.reply_text(app._("start", "messages", locale=message.from_user.language_code))
await message.reply_text(
app._("start", "messages", locale=message.from_user.language_code)
)

View File

@@ -18,7 +18,9 @@ async def command_language(app: PyroClient, message: Message):
buttons: List[InlineButton] = []
for locale, data in app.in_every_locale("metadata").items():
buttons.append(InlineButton(f"{data['flag']} {data['name']}", f"language:{locale}"))
buttons.append(
InlineButton(f"{data['flag']} {data['name']}", f"language:{locale}")
)
keyboard.add(*buttons)

View File

@@ -1,25 +0,0 @@
[project]
name = "PyrogramBotBase"
authors = [{ name = "Profitroll" }]
readme = "README.md"
requires-python = ">=3.11"
[tool.black]
line-length = 108
target-version = ["py311", "py312", "py313"]
[tool.isort]
profile = "black"
[tool.mypy]
namespace_packages = true
install_types = true
strict = true
show_error_codes = true
[tool.pylint]
disable = ["line-too-long"]
[tool.pylint.main]
extension-pkg-whitelist = ["ujson"]
py-version = 3.11

View File

@@ -1,10 +1,10 @@
apscheduler~=3.11.0
async_pymongo==0.1.9
apscheduler~=3.10.4
convopyro==0.5
libbot[speed,pyrogram]==4.1.0
tgcrypto-pyrofork==1.2.7
uvloop==0.21.0
tgcrypto==1.2.5
uvloop==0.19.0
# If uses MongoDB:
mongodb-migrations==1.3.1
--extra-index-url https://git.end-play.xyz/api/packages/profitroll/pypi/simple
async_pymongo==0.1.4
libbot[speed,pyrogram]==3.2.1
pykeyboard==0.1.7