diff --git a/.gitignore b/.gitignore
index 172f84b..687222a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -172,7 +172,7 @@ cython_debug/
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
-#.idea/
+.idea/
### PyCharm+all template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
diff --git a/.idea/misc.xml b/.idea/misc.xml
deleted file mode 100644
index 333e16b..0000000
--- a/.idea/misc.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 94a25f7..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/config.py b/config.py
index 2aa9ad9..32505ca 100644
--- a/config.py
+++ b/config.py
@@ -1,12 +1,14 @@
-from vkbottle.user import UserLabeler, Message, User
+from vkbottle.user import Message
TOKEN = "test"
-bl = UserLabeler()
-user = User(token=TOKEN)
-
-
prefix_bot = "хуй"
prefix_dd = "дд"
+user = None
+
+DB_LOGIN = "postgres"
+DB_PASSWORD = "MQLDUhDrF3cxj3zszsA63tZoSeSW"
+DB_HOST = "51.38.114.136"
+DB_NAME = "vk_lp"
async def edit_message(
@@ -22,5 +24,5 @@ async def edit_message(
kwargs.setdefault('dont_parse_links', False)
return await user.api.messages.edit(
- **kwargs
+ **kwargs
)
diff --git a/custom_rules/permission.py b/custom_rules/permission.py
index bae9180..88da081 100644
--- a/custom_rules/permission.py
+++ b/custom_rules/permission.py
@@ -1,6 +1,7 @@
+import json
+
from vkbottle.dispatch.rules import ABCRule
from vkbottle.user import Message
-import json
def load_trusted_ids():
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..6373118
--- /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.DB_LOGIN}:{config.DB_PASSWORD}@{config.DB_HOST}/{config.DB_NAME}"
+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..c24f639
--- /dev/null
+++ b/db/models.py
@@ -0,0 +1,15 @@
+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, unique=True)
+ token = Column("token", Text, nullable=False)
diff --git a/db/requests.py b/db/requests.py
new file mode 100644
index 0000000..d6308c1
--- /dev/null
+++ b/db/requests.py
@@ -0,0 +1,38 @@
+from typing import Optional
+
+from loguru import logger
+from sqlalchemy import select
+
+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) -> Optional[db.models.UsersTokens]:
+ """
+ Возвращает токен пользователя
+ :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 result.scalars().one_or_none()
+
+ except Exception as e:
+ logger.exception(e)
+ return None
diff --git a/main.py b/main.py
index 9ad1a5b..08246bc 100644
--- a/main.py
+++ b/main.py
@@ -1,13 +1,32 @@
+import asyncio
import sys
-from config import user
-from routes import labelers
+
from loguru import logger
+from vkbottle.user import User
+
+import config
+import db
logger.add(sys.stderr, format="{time} {level} {message}", filter="my_module", level="INFO")
-for custom_labeler in labelers:
- user.labeler.load(custom_labeler)
+
+async def main():
+ from routes import labelers
+
+ user_info = await db.requests.get_user_token(304398797)
+ if not user_info:
+ logger.error("user don't have a token in db!")
+ return
+
+ config.user = User(token=user_info.token)
+
+ for custom_labeler in labelers:
+ config.user.labeler.load(custom_labeler)
+
+ loop.create_task(config.user.run_polling())
if __name__ == "__main__":
- user.run_forever()
+ loop = asyncio.get_event_loop()
+ loop.create_task(main())
+ loop.run_forever()
diff --git a/requirements.txt b/requirements.txt
index b4d2e76..d102206 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,3 +2,5 @@ gitpython==3.1.40
loguru==0.7.2
pytz==2023.3.post1
vkbottle==4.3.12
+SQLAlchemy~=2.0.22
+asyncpg
\ 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..edba8ac 100644
--- a/routes/delete_msg.py
+++ b/routes/delete_msg.py
@@ -1,8 +1,11 @@
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
+from custom_rules.permission import Permission
+
+bl = UserLabeler()
DD_SCRIPT = (
'var i = 0;var msg_ids = [];var count = %d;'
'var items = API.messages.getHistory({"peer_id":%d,"count":"200", "offset":"0"}).items;'
@@ -16,31 +19,32 @@ DD_SCRIPT = (
@bl.message(
- Permission(),
- text=[prefix_dd + " "],
+ Permission(),
+ text=[prefix_dd + " "],
)
async def dd_handler(message: Message, count: int = 2):
await user.api.execute(
- DD_SCRIPT % (
- count,
- message.peer_id,
- message.from_id,
- int(datetime.datetime.now().timestamp())
- )
+ DD_SCRIPT % (
+ count,
+ message.peer_id,
+ message.from_id,
+ int(datetime.datetime.now().timestamp())
+ )
)
@bl.message(
- Permission(),
- text=["все", "всё"],
+ Permission(),
+ text=["все", "всё"],
)
async def dd_all_handler(message: Message):
count = 1000
+
await user.api.execute(
- DD_SCRIPT % (
- count,
- message.peer_id,
- message.from_id,
- int(datetime.datetime.now().timestamp())
- )
+ DD_SCRIPT % (
+ count,
+ message.peer_id,
+ message.from_id,
+ int(datetime.datetime.now().timestamp())
+ )
)
diff --git a/routes/game_handler.py b/routes/game_handler.py
index 60b9d84..e95fa1f 100644
--- a/routes/game_handler.py
+++ b/routes/game_handler.py
@@ -1,12 +1,16 @@
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()
+
@bl.message(
- Permission(),
- text=[prefix_bot + " игра"],
+ Permission(),
+ text=[prefix_bot + " игра"],
)
async def game(message: Message):
loader = (
diff --git a/routes/info_bot.py b/routes/info_bot.py
index 6f16818..bb9c3a6 100644
--- a/routes/info_bot.py
+++ b/routes/info_bot.py
@@ -1,10 +1,12 @@
-import pytz
import git
+import pytz
+from vkbottle.user import Message, UserLabeler
+from config import edit_message, prefix_bot
from custom_rules.permission import Permission
-from vkbottle.user import Message
-from config import bl, edit_message, prefix_bot
-from utils import rewards_list
+from utils import rewards
+
+bl = UserLabeler()
@bl.message(Permission(), text=[prefix_bot + " бот"])
@@ -20,4 +22,4 @@ async def about(message: Message):
"Название бота 🤖: dize_lp\n"
f"Версия бота ⚙️: {version} от {version_date}\n"
"Создатель бота 👨🦱: @dize_dev (Илдырым Денница)\n"
- f"Достижения🏆: {rewards_list[1]}")
+ f"Достижения🏆: {rewards['creator']}")
diff --git a/routes/rewards.py b/routes/rewards.py
index eb414d9..00e1557 100644
--- a/routes/rewards.py
+++ b/routes/rewards.py
@@ -1,12 +1,14 @@
-from custom_rules.permission import Permission
-from vkbottle.user import Message
-from config import bl, edit_message, prefix_bot
-from utils import rewards_list
+from vkbottle.user import Message, UserLabeler
-listToStr = ' '.join(map(str, rewards_list))
+from config import edit_message, prefix_bot
+from custom_rules.permission import Permission
+import utils
+
+
+bl = UserLabeler()
@bl.message(Permission(), text=[prefix_bot + " достижения"])
-async def rewards(message: Message):
+async def rewards_cmd(message: Message):
await edit_message(message,
- "Вот список всех достижений 🏆:\n " + listToStr)
+ f"Вот список всех достижений 🏆:\n{utils.next_line_symbol.join(utils.rewards)}")
diff --git a/utils.py b/utils.py
index 6590dcf..5132ce3 100644
--- a/utils.py
+++ b/utils.py
@@ -1,8 +1,10 @@
-rewards_list = [
- "Первооткрыватель 🎓\n",
- "Создатель ⭐\n",
- "Администратор 👨🏻💼\n",
- "Модератор 🛡️\n",
- "Исследователь 🔎\n",
- "Спонсор 💸\n",
-]
+rewards = {
+ "discoverer": "Первооткрыватель",
+ "creator": "Создатель",
+ "admin": "Администратор",
+ "moderator": "Moderator",
+ "researcher": "Исследователь",
+ "sponsor": "Спонсор"
+}
+
+next_line_symbol = "\n"