Merge pull request #3 from dizedev/feature/sqlalchemy

added sqlalchemy
This commit is contained in:
2023-10-31 23:35:37 +07:00
committed by GitHub
17 changed files with 157 additions and 71 deletions
+1 -1
View File
@@ -172,7 +172,7 @@ cython_debug/
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # 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 # 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. # option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/ .idea/
### PyCharm+all template ### PyCharm+all template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
-7
View File
@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Black">
<option name="sdkName" value="Python 3.9 (dizevk_lp)" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9 (dizevk_lp)" project-jdk-type="Python SDK" />
</project>
Generated
-6
View File
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
+7 -5
View File
@@ -1,12 +1,14 @@
from vkbottle.user import UserLabeler, Message, User from vkbottle.user import Message
TOKEN = "test" TOKEN = "test"
bl = UserLabeler()
user = User(token=TOKEN)
prefix_bot = "хуй" prefix_bot = "хуй"
prefix_dd = "дд" prefix_dd = "дд"
user = None
DB_LOGIN = "postgres"
DB_PASSWORD = "MQLDUhDrF3cxj3zszsA63tZoSeSW"
DB_HOST = "51.38.114.136"
DB_NAME = "vk_lp"
async def edit_message( async def edit_message(
+2 -1
View File
@@ -1,6 +1,7 @@
import json
from vkbottle.dispatch.rules import ABCRule from vkbottle.dispatch.rules import ABCRule
from vkbottle.user import Message from vkbottle.user import Message
import json
def load_trusted_ids(): def load_trusted_ids():
+1
View File
@@ -0,0 +1 @@
from . import config, models, requests
+7
View File
@@ -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)
+15
View File
@@ -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)
+38
View File
@@ -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
+24 -5
View File
@@ -1,13 +1,32 @@
import asyncio
import sys import sys
from config import user
from routes import labelers
from loguru import logger 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") 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__": if __name__ == "__main__":
user.run_forever() loop = asyncio.get_event_loop()
loop.create_task(main())
loop.run_forever()
+2
View File
@@ -2,3 +2,5 @@ gitpython==3.1.40
loguru==0.7.2 loguru==0.7.2
pytz==2023.3.post1 pytz==2023.3.post1
vkbottle==4.3.12 vkbottle==4.3.12
SQLAlchemy~=2.0.22
asyncpg
+2 -2
View File
@@ -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]
+7 -3
View File
@@ -1,8 +1,11 @@
import datetime 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 = ( DD_SCRIPT = (
'var i = 0;var msg_ids = [];var count = %d;' 'var i = 0;var msg_ids = [];var count = %d;'
'var items = API.messages.getHistory({"peer_id":%d,"count":"200", "offset":"0"}).items;' 'var items = API.messages.getHistory({"peer_id":%d,"count":"200", "offset":"0"}).items;'
@@ -36,6 +39,7 @@ async def dd_handler(message: Message, count: int = 2):
) )
async def dd_all_handler(message: Message): async def dd_all_handler(message: Message):
count = 1000 count = 1000
await user.api.execute( await user.api.execute(
DD_SCRIPT % ( DD_SCRIPT % (
count, count,
+6 -2
View File
@@ -1,8 +1,12 @@
import asyncio 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 from custom_rules.permission import Permission
bl = UserLabeler()
@bl.message( @bl.message(
Permission(), Permission(),
+7 -5
View File
@@ -1,10 +1,12 @@
import pytz
import git import git
import pytz
from vkbottle.user import Message, UserLabeler
from config import edit_message, prefix_bot
from custom_rules.permission import Permission from custom_rules.permission import Permission
from vkbottle.user import Message from utils import rewards
from config import bl, edit_message, prefix_bot
from utils import rewards_list bl = UserLabeler()
@bl.message(Permission(), text=[prefix_bot + " бот"]) @bl.message(Permission(), text=[prefix_bot + " бот"])
@@ -20,4 +22,4 @@ async def about(message: Message):
"Название бота 🤖: dize_lp\n" "Название бота 🤖: dize_lp\n"
f"Версия бота ⚙️: {version} от {version_date}\n" f"Версия бота ⚙️: {version} от {version_date}\n"
"Создатель бота 👨‍🦱: @dize_dev (Илдырым Денница)\n" "Создатель бота 👨‍🦱: @dize_dev (Илдырым Денница)\n"
f"Достижения🏆: {rewards_list[1]}") f"Достижения🏆: {rewards['creator']}")
+9 -7
View File
@@ -1,12 +1,14 @@
from custom_rules.permission import Permission from vkbottle.user import Message, UserLabeler
from vkbottle.user import Message
from config import bl, edit_message, prefix_bot
from utils import rewards_list
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 + " достижения"]) @bl.message(Permission(), text=[prefix_bot + " достижения"])
async def rewards(message: Message): async def rewards_cmd(message: Message):
await edit_message(message, await edit_message(message,
"Вот список всех достижений 🏆:\n " + listToStr) f"Вот список всех достижений 🏆:\n{utils.next_line_symbol.join(utils.rewards)}")
+10 -8
View File
@@ -1,8 +1,10 @@
rewards_list = [ rewards = {
"Первооткрыватель 🎓\n", "discoverer": "Первооткрыватель",
"Создатель\n", "creator": "Создатель",
"Администратор 👨🏻‍💼\n", "admin": "Администратор",
"Модератор 🛡️\n", "moderator": "Moderator",
"Исследователь 🔎\n", "researcher": "Исследователь",
"Спонсор 💸\n", "sponsor": "Спонсор"
] }
next_line_symbol = "\n"