diff --git a/config.py b/config.py index 2aa9ad9..ee4a7b9 100644 --- a/config.py +++ b/config.py @@ -1,10 +1,7 @@ -from vkbottle.user import UserLabeler, Message, User +from vkbottle.user import Message +from main import user TOKEN = "test" -bl = UserLabeler() -user = User(token=TOKEN) - - prefix_bot = "хуй" prefix_dd = "дд" diff --git a/db/__init__.py b/db/__init__.py new file mode 100644 index 0000000..5121549 --- /dev/null +++ b/db/__init__.py @@ -0,0 +1 @@ +from . import config, models, requests diff --git a/db/config.py b/db/config.py new file mode 100644 index 0000000..24eea1a --- /dev/null +++ b/db/config.py @@ -0,0 +1,7 @@ +from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine + +import config + +DB_CONNECT_URL = f"postgresql+asyncpg://{config.psql_login}:{config.psql_password}@{config.psql_host}/{config.psql_database}" +engine = create_async_engine(DB_CONNECT_URL) +async_session = async_sessionmaker(engine) diff --git a/db/models.py b/db/models.py new file mode 100644 index 0000000..651db5e --- /dev/null +++ b/db/models.py @@ -0,0 +1,14 @@ +from sqlalchemy import (BigInteger, Column, Identity, Text) +from sqlalchemy.orm import DeclarativeBase + + +class Base(DeclarativeBase): + pass + + +class UsersTokens(Base): + __tablename__ = "users_tokens" + + id = Column("id", BigInteger, Identity(start=1, increment=1, minvalue=1, cycle=False, cache=1), nullable=False, primary_key=True) + vkid = Column("vkid", BigInteger, nullable=False) + token = Column("token", Text, nullable=False) diff --git a/db/requests.py b/db/requests.py new file mode 100644 index 0000000..f340804 --- /dev/null +++ b/db/requests.py @@ -0,0 +1,35 @@ +from loguru import logger +from sqlalchemy import select, update +import db + + +async def execute_statement(statement) -> None: + """ + Возвращает результат выполнения statement + :param statement: + :return: + """ + + try: + async with db.config.async_session() as session: + await session.execute(statement) + await session.commit() + except Exception as e: + logger.exception(e) + # return None + + +async def get_user_token(user_id: int) -> str: + """ + Возвращает токен пользователя + :param user_id: VKID + """ + + try: + async with db.config.async_session() as session: + result = await session.execute(select(db.models.UsersTokens).where(db.models.UsersTokens.vkid == user_id)) + return await result.scalars().one_or_none() + + except Exception as e: + logger.exception(e) + return None diff --git a/main.py b/main.py index 9ad1a5b..8d24b1a 100644 --- a/main.py +++ b/main.py @@ -1,13 +1,25 @@ +import asyncio import sys -from config import user +from vkbottle.user import User +import db.requests from routes import labelers from loguru import logger logger.add(sys.stderr, format="{time} {level} {message}", filter="my_module", level="INFO") +user = None -for custom_labeler in labelers: - user.labeler.load(custom_labeler) + +async def main(): + global user + + token = await db.requests.get_user_token(1232131) + user = User(token=token) + + for custom_labeler in labelers: + user.labeler.load(custom_labeler) + + user.run_forever() if __name__ == "__main__": - user.run_forever() + asyncio.run(main()) diff --git a/requirements.txt b/requirements.txt index b4d2e76..6301f31 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,3 +2,4 @@ gitpython==3.1.40 loguru==0.7.2 pytz==2023.3.post1 vkbottle==4.3.12 +SQLAlchemy~=2.0.22 \ No newline at end of file diff --git a/routes/__init__.py b/routes/__init__.py index 2a0fd5a..3d14f19 100644 --- a/routes/__init__.py +++ b/routes/__init__.py @@ -1,3 +1,3 @@ -from . import game_handler, delete_msg, info_bot +from . import game_handler, delete_msg, info_bot, rewards -labelers = [game_handler.bl, delete_msg.bl, info_bot.bl] +labelers = [game_handler.bl, delete_msg.bl, info_bot.bl, rewards.bl] diff --git a/routes/delete_msg.py b/routes/delete_msg.py index 21ae7ff..859d658 100644 --- a/routes/delete_msg.py +++ b/routes/delete_msg.py @@ -1,8 +1,9 @@ import datetime from custom_rules.permission import Permission -from vkbottle.user import Message -from config import bl, user, prefix_dd +from vkbottle.user import Message, UserLabeler +from config import user, prefix_dd +bl = UserLabeler(custom_rules=Permission) DD_SCRIPT = ( 'var i = 0;var msg_ids = [];var count = %d;' 'var items = API.messages.getHistory({"peer_id":%d,"count":"200", "offset":"0"}).items;' @@ -36,6 +37,7 @@ async def dd_handler(message: Message, count: int = 2): ) async def dd_all_handler(message: Message): count = 1000 + await user.api.execute( DD_SCRIPT % ( count, diff --git a/routes/game_handler.py b/routes/game_handler.py index 60b9d84..95b1174 100644 --- a/routes/game_handler.py +++ b/routes/game_handler.py @@ -1,9 +1,12 @@ import asyncio -from vkbottle.user import Message -from config import bl, prefix_bot, edit_message +from vkbottle.user import Message, UserLabeler +from config import prefix_bot, edit_message from custom_rules.permission import Permission +bl = UserLabeler(custom_rules=Permission) + + @bl.message( Permission(), text=[prefix_bot + " игра"], diff --git a/routes/info_bot.py b/routes/info_bot.py index 6f16818..b7dd033 100644 --- a/routes/info_bot.py +++ b/routes/info_bot.py @@ -2,11 +2,14 @@ import pytz import git from custom_rules.permission import Permission -from vkbottle.user import Message -from config import bl, edit_message, prefix_bot +from vkbottle.user import Message, UserLabeler +from config import edit_message, prefix_bot from utils import rewards_list +bl = UserLabeler(custom_rules=Permission) + + @bl.message(Permission(), text=[prefix_bot + " бот"]) async def about(message: Message): repo = git.Repo(search_parent_directories=True) diff --git a/routes/rewards.py b/routes/rewards.py index eb414d9..dd100ba 100644 --- a/routes/rewards.py +++ b/routes/rewards.py @@ -1,9 +1,10 @@ from custom_rules.permission import Permission -from vkbottle.user import Message -from config import bl, edit_message, prefix_bot +from vkbottle.user import Message, UserLabeler +from config import edit_message, prefix_bot from utils import rewards_list listToStr = ' '.join(map(str, rewards_list)) +bl = UserLabeler(custom_rules=Permission) @bl.message(Permission(), text=[prefix_bot + " достижения"])