From 3465160c3a5683bb3985e1738fb58a9f16dce3ee Mon Sep 17 00:00:00 2001 From: /dize <87265715+dizedev@users.noreply.github.com> Date: Mon, 30 Oct 2023 19:02:30 +0600 Subject: [PATCH 1/9] Update config.py --- config.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/config.py b/config.py index 9d099c1..2b572d0 100644 --- a/config.py +++ b/config.py @@ -1,7 +1,5 @@ from vkbottle.user import UserLabeler, Message, User -TOKEN = 'vk1.a.4nNdLuOJin9tn71J-cKGu6MKCR2rNHkdRPn4lbW28CS9aL0Q-rhG3ZQi6UQnV9ClpBrNp2obRUltWREoSuwz2Km7OXGlBaP3jt9KsEeut4N3OvHWoTUuqNEtiRrgz2koSrPXLEJZ8i974KD2CgXWqmX4IsSC3kCMDK_aS1xetU3S38-Z1JFyNZu5Tl8yUGopptCjEqA9jF8CjznWv1gC2A' - bl = UserLabeler() user = User(token=TOKEN) From 0622024bec23bafdf485d8a9c6d36a1eb2968f0d Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Oct 2023 22:44:32 +0700 Subject: [PATCH 2/9] Squashed commit of the following: commit 49f8a7c8cb0a79bf17c081685cbffb94f849b097 Author: /dize <87265715+dizedev@users.noreply.github.com> Date: Mon Oct 30 19:03:08 2023 +0600 Update config.py commit e509aa34fd00578b4448e94a7ed737291225d352 Author: Alex Date: Mon Oct 30 00:53:25 2023 +0700 added requirements commit 19eae811ab48b18531b2c6e113313fe3be9e53ec Author: Alex Date: Mon Oct 30 00:50:56 2023 +0700 some fixes// commit e35a6879910ac956ef5fd741d3f2c3e8a8a5cdd9 Author: Alex Date: Mon Oct 30 00:46:41 2023 +0700 some edits --- .gitignore | 255 ++++++++++++++++++ .idea/.gitignore | 3 - .idea/UserVKBot.iml | 10 - .idea/discord.xml | 7 - .../inspectionProfiles/profiles_settings.xml | 6 - .idea/misc.xml | 5 +- .idea/modules.xml | 8 - config.py | 1 - custom_rules/permission.py | 22 +- requirements.txt | 2 + routes/__init__.py | 4 +- routes/{deletedmsg.py => delete_msg.py} | 0 12 files changed, 273 insertions(+), 50 deletions(-) create mode 100644 .gitignore delete mode 100644 .idea/.gitignore delete mode 100644 .idea/UserVKBot.iml delete mode 100644 .idea/discord.xml delete mode 100644 .idea/inspectionProfiles/profiles_settings.xml delete mode 100644 .idea/modules.xml create mode 100644 requirements.txt rename routes/{deletedmsg.py => delete_msg.py} (100%) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..172f84b --- /dev/null +++ b/.gitignore @@ -0,0 +1,255 @@ +### VisualStudioCode template +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +### Python template +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# 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/ + +### PyCharm+all template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 26d3352..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/.idea/UserVKBot.iml b/.idea/UserVKBot.iml deleted file mode 100644 index 74d515a..0000000 --- a/.idea/UserVKBot.iml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/discord.xml b/.idea/discord.xml deleted file mode 100644 index 30bab2a..0000000 --- a/.idea/discord.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2d..0000000 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 8da2b3d..333e16b 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,7 @@ - + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index b0fc048..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/config.py b/config.py index 2b572d0..2ef913c 100644 --- a/config.py +++ b/config.py @@ -1,7 +1,6 @@ from vkbottle.user import UserLabeler, Message, User bl = UserLabeler() - user = User(token=TOKEN) diff --git a/custom_rules/permission.py b/custom_rules/permission.py index c15dc8c..bae9180 100644 --- a/custom_rules/permission.py +++ b/custom_rules/permission.py @@ -3,21 +3,19 @@ from vkbottle.user import Message import json +def load_trusted_ids(): + try: + with open("./user_ids.json", "r") as json_file: + data = json.load(json_file) + return data + except FileNotFoundError: + # Если файл не существует, вернуть пустой список + return [] + class Permission(ABCRule[Message]): def __init__(self): - self.trusted_ids = self.load_trusted_ids() - - def load_trusted_ids(self): - try: - with open("./user_ids.json", "r") as json_file: - data = json.load(json_file) - return data - except FileNotFoundError: - # Если файл не существует, вернуть пустой список - return [] + self.trusted_ids = load_trusted_ids() async def check(self, event: Message) -> bool: return event.from_id in self.trusted_ids - - diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..0e56e80 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +loguru==0.7.2 +vkbottle==4.3.12 diff --git a/routes/__init__.py b/routes/__init__.py index 955e4dc..2a0fd5a 100644 --- a/routes/__init__.py +++ b/routes/__init__.py @@ -1,3 +1,3 @@ -from . import game_handler, deletedmsg, info_bot, rewards +from . import game_handler, delete_msg, info_bot -labelers = [game_handler.bl, deletedmsg.bl, info_bot.bl, rewards.bl] +labelers = [game_handler.bl, delete_msg.bl, info_bot.bl] diff --git a/routes/deletedmsg.py b/routes/delete_msg.py similarity index 100% rename from routes/deletedmsg.py rename to routes/delete_msg.py From 7774f08180b6772c5375ba865cdd3b30a27da1d5 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Oct 2023 23:00:56 +0700 Subject: [PATCH 3/9] make it more cool --- config.py | 2 ++ main.py | 1 + requirements.txt | 2 ++ routes/info_bot.py | 18 +++++++++++++++--- routes/rewards.py | 1 - utils.py | 4 ++-- 6 files changed, 22 insertions(+), 6 deletions(-) diff --git a/config.py b/config.py index 2ef913c..2aa9ad9 100644 --- a/config.py +++ b/config.py @@ -1,5 +1,6 @@ from vkbottle.user import UserLabeler, Message, User +TOKEN = "test" bl = UserLabeler() user = User(token=TOKEN) @@ -7,6 +8,7 @@ user = User(token=TOKEN) prefix_bot = "хуй" prefix_dd = "дд" + async def edit_message( message: Message, text: str = '', diff --git a/main.py b/main.py index 672a8a6..9ad1a5b 100644 --- a/main.py +++ b/main.py @@ -8,5 +8,6 @@ logger.add(sys.stderr, format="{time} {level} {message}", filter="my_module", le for custom_labeler in labelers: user.labeler.load(custom_labeler) + if __name__ == "__main__": user.run_forever() diff --git a/requirements.txt b/requirements.txt index 0e56e80..b4d2e76 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,4 @@ +gitpython==3.1.40 loguru==0.7.2 +pytz==2023.3.post1 vkbottle==4.3.12 diff --git a/routes/info_bot.py b/routes/info_bot.py index afb2782..6f16818 100644 --- a/routes/info_bot.py +++ b/routes/info_bot.py @@ -1,11 +1,23 @@ +import pytz +import git + from custom_rules.permission import Permission from vkbottle.user import Message -from config import bl, edit_message, prefix_bot +from config import bl, edit_message, prefix_bot from utils import rewards_list - @bl.message(Permission(), text=[prefix_bot + " бот"]) async def about(message: Message): + repo = git.Repo(search_parent_directories=True) + version = repo.head.object.hexsha[:7] + version_date = repo.head.object.committed_datetime.astimezone(pytz.timezone("Europe/Moscow")) + + f'Текущая версия бота: {version} от {version_date}' + await edit_message(message, - "Информация о боте 🤖:\n\n Название бота 🤖: dize_lp\n Версия бота ⚙️: v0.1\n Создатель бота 👨‍🦱: @dize_dev(Илдырым Денница)\n Достижения🏆: " + rewards_list[1]) + "Информация о боте 🤖:\n\n" + "Название бота 🤖: dize_lp\n" + f"Версия бота ⚙️: {version} от {version_date}\n" + "Создатель бота 👨‍🦱: @dize_dev (Илдырым Денница)\n" + f"Достижения🏆: {rewards_list[1]}") diff --git a/routes/rewards.py b/routes/rewards.py index a4d2cff..eb414d9 100644 --- a/routes/rewards.py +++ b/routes/rewards.py @@ -3,7 +3,6 @@ from vkbottle.user import Message from config import bl, edit_message, prefix_bot from utils import rewards_list - listToStr = ' '.join(map(str, rewards_list)) diff --git a/utils.py b/utils.py index 5224d58..6590dcf 100644 --- a/utils.py +++ b/utils.py @@ -2,7 +2,7 @@ rewards_list = [ "Первооткрыватель 🎓\n", "Создатель ⭐\n", "Администратор 👨🏻‍💼\n", - "Модератоор 🛡️\n", - "Иследователь 🔎\n", + "Модератор 🛡️\n", + "Исследователь 🔎\n", "Спонсор 💸\n", ] From ce88bb6dc8fbbeb92bff8ca6a766c06b96288dce Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Oct 2023 23:27:40 +0700 Subject: [PATCH 4/9] more cool features --- config.py | 7 ++----- db/__init__.py | 1 + db/config.py | 7 +++++++ db/models.py | 14 ++++++++++++++ db/requests.py | 35 +++++++++++++++++++++++++++++++++++ main.py | 20 ++++++++++++++++---- requirements.txt | 1 + routes/__init__.py | 4 ++-- routes/delete_msg.py | 6 ++++-- routes/game_handler.py | 7 +++++-- routes/info_bot.py | 7 +++++-- routes/rewards.py | 5 +++-- 12 files changed, 95 insertions(+), 19 deletions(-) create mode 100644 db/__init__.py create mode 100644 db/config.py create mode 100644 db/models.py create mode 100644 db/requests.py 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 + " достижения"]) From 57f401ee5f4587f42dd9d7a4b4e1399c26b26850 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Oct 2023 23:30:16 +0700 Subject: [PATCH 5/9] code reformat --- config.py | 3 ++- db/models.py | 3 ++- db/requests.py | 3 ++- main.py | 4 +++- routes/delete_msg.py | 32 ++++++++++++++++---------------- routes/game_handler.py | 7 ++++--- routes/info_bot.py | 9 ++++----- routes/rewards.py | 3 ++- 8 files changed, 35 insertions(+), 29 deletions(-) diff --git a/config.py b/config.py index ee4a7b9..c85ab48 100644 --- a/config.py +++ b/config.py @@ -1,4 +1,5 @@ from vkbottle.user import Message + from main import user TOKEN = "test" @@ -19,5 +20,5 @@ async def edit_message( kwargs.setdefault('dont_parse_links', False) return await user.api.messages.edit( - **kwargs + **kwargs ) diff --git a/db/models.py b/db/models.py index 651db5e..eb2f9ea 100644 --- a/db/models.py +++ b/db/models.py @@ -9,6 +9,7 @@ class Base(DeclarativeBase): 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) + 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 index f340804..a5ff858 100644 --- a/db/requests.py +++ b/db/requests.py @@ -1,5 +1,6 @@ from loguru import logger -from sqlalchemy import select, update +from sqlalchemy import select + import db diff --git a/main.py b/main.py index 8d24b1a..b66d2f1 100644 --- a/main.py +++ b/main.py @@ -1,9 +1,11 @@ import asyncio import sys + +from loguru import logger 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 diff --git a/routes/delete_msg.py b/routes/delete_msg.py index 859d658..c46416b 100644 --- a/routes/delete_msg.py +++ b/routes/delete_msg.py @@ -17,32 +17,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 95b1174..11d7fad 100644 --- a/routes/game_handler.py +++ b/routes/game_handler.py @@ -1,15 +1,16 @@ import asyncio + 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 + " игра"], + Permission(), + text=[prefix_bot + " игра"], ) async def game(message: Message): loader = ( diff --git a/routes/info_bot.py b/routes/info_bot.py index b7dd033..b4c811b 100644 --- a/routes/info_bot.py +++ b/routes/info_bot.py @@ -1,11 +1,10 @@ -import pytz import git - -from custom_rules.permission import Permission +import pytz from vkbottle.user import Message, UserLabeler -from config import edit_message, prefix_bot -from utils import rewards_list +from config import edit_message, prefix_bot +from custom_rules.permission import Permission +from utils import rewards_list bl = UserLabeler(custom_rules=Permission) diff --git a/routes/rewards.py b/routes/rewards.py index dd100ba..55d6a5e 100644 --- a/routes/rewards.py +++ b/routes/rewards.py @@ -1,6 +1,7 @@ -from custom_rules.permission import Permission from vkbottle.user import Message, UserLabeler + from config import edit_message, prefix_bot +from custom_rules.permission import Permission from utils import rewards_list listToStr = ' '.join(map(str, rewards_list)) From c5f744fe46547f53073a4bc81098c789d2607005 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Oct 2023 23:30:54 +0700 Subject: [PATCH 6/9] edit .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From aed9ef06643059e901d22c1694649cc38c7b042c Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 31 Oct 2023 23:34:08 +0700 Subject: [PATCH 7/9] coolest edit's --- config.py | 8 ++++++-- custom_rules/permission.py | 3 ++- db/config.py | 2 +- db/models.py | 2 +- db/requests.py | 6 ++++-- main.py | 23 ++++++++++++++--------- requirements.txt | 3 ++- routes/delete_msg.py | 10 ++++++---- routes/game_handler.py | 2 +- routes/info_bot.py | 6 +++--- routes/rewards.py | 10 +++++----- utils.py | 18 ++++++++++-------- 12 files changed, 55 insertions(+), 38 deletions(-) diff --git a/config.py b/config.py index c85ab48..32505ca 100644 --- a/config.py +++ b/config.py @@ -1,10 +1,14 @@ from vkbottle.user import Message -from main import user - TOKEN = "test" 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( 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/config.py b/db/config.py index 24eea1a..6373118 100644 --- a/db/config.py +++ b/db/config.py @@ -2,6 +2,6 @@ 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}" +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 index eb2f9ea..c24f639 100644 --- a/db/models.py +++ b/db/models.py @@ -11,5 +11,5 @@ class UsersTokens(Base): 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) + vkid = Column("vkid", BigInteger, nullable=False, unique=True) token = Column("token", Text, nullable=False) diff --git a/db/requests.py b/db/requests.py index a5ff858..d6308c1 100644 --- a/db/requests.py +++ b/db/requests.py @@ -1,3 +1,5 @@ +from typing import Optional + from loguru import logger from sqlalchemy import select @@ -20,7 +22,7 @@ async def execute_statement(statement) -> None: # return None -async def get_user_token(user_id: int) -> str: +async def get_user_token(user_id: int) -> Optional[db.models.UsersTokens]: """ Возвращает токен пользователя :param user_id: VKID @@ -29,7 +31,7 @@ async def get_user_token(user_id: int) -> str: 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() + return result.scalars().one_or_none() except Exception as e: logger.exception(e) diff --git a/main.py b/main.py index b66d2f1..08246bc 100644 --- a/main.py +++ b/main.py @@ -4,24 +4,29 @@ import sys from loguru import logger from vkbottle.user import User -import db.requests -from routes import labelers +import config +import db logger.add(sys.stderr, format="{time} {level} {message}", filter="my_module", level="INFO") -user = None async def main(): - global user + from routes import labelers - token = await db.requests.get_user_token(1232131) - user = User(token=token) + 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: - user.labeler.load(custom_labeler) + config.user.labeler.load(custom_labeler) - user.run_forever() + loop.create_task(config.user.run_polling()) if __name__ == "__main__": - asyncio.run(main()) + loop = asyncio.get_event_loop() + loop.create_task(main()) + loop.run_forever() diff --git a/requirements.txt b/requirements.txt index 6301f31..d102206 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,4 +2,5 @@ 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 +SQLAlchemy~=2.0.22 +asyncpg \ No newline at end of file diff --git a/routes/delete_msg.py b/routes/delete_msg.py index c46416b..edba8ac 100644 --- a/routes/delete_msg.py +++ b/routes/delete_msg.py @@ -1,9 +1,11 @@ import datetime -from custom_rules.permission import Permission -from vkbottle.user import Message, UserLabeler -from config import user, prefix_dd -bl = UserLabeler(custom_rules=Permission) +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;' diff --git a/routes/game_handler.py b/routes/game_handler.py index 11d7fad..e95fa1f 100644 --- a/routes/game_handler.py +++ b/routes/game_handler.py @@ -5,7 +5,7 @@ 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 = UserLabeler() @bl.message( diff --git a/routes/info_bot.py b/routes/info_bot.py index b4c811b..bb9c3a6 100644 --- a/routes/info_bot.py +++ b/routes/info_bot.py @@ -4,9 +4,9 @@ from vkbottle.user import Message, UserLabeler from config import edit_message, prefix_bot from custom_rules.permission import Permission -from utils import rewards_list +from utils import rewards -bl = UserLabeler(custom_rules=Permission) +bl = UserLabeler() @bl.message(Permission(), text=[prefix_bot + " бот"]) @@ -22,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 55d6a5e..00e1557 100644 --- a/routes/rewards.py +++ b/routes/rewards.py @@ -2,13 +2,13 @@ from vkbottle.user import Message, UserLabeler from config import edit_message, prefix_bot from custom_rules.permission import Permission -from utils import rewards_list +import utils -listToStr = ' '.join(map(str, rewards_list)) -bl = UserLabeler(custom_rules=Permission) + +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" From 665e9b804d8bd8527a2c76c3c53e37f5c67a8823 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 31 Oct 2023 23:34:25 +0700 Subject: [PATCH 8/9] what it? --- .idea/GitLink.xml | 6 +++++ .idea/git_toolbox_prj.xml | 15 +++++++++++ .idea/inspectionProfiles/Project_Default.xml | 25 +++++++++++++++++++ .../inspectionProfiles/profiles_settings.xml | 6 +++++ 4 files changed, 52 insertions(+) create mode 100644 .idea/GitLink.xml create mode 100644 .idea/git_toolbox_prj.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml diff --git a/.idea/GitLink.xml b/.idea/GitLink.xml new file mode 100644 index 0000000..009597c --- /dev/null +++ b/.idea/GitLink.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/git_toolbox_prj.xml b/.idea/git_toolbox_prj.xml new file mode 100644 index 0000000..02b915b --- /dev/null +++ b/.idea/git_toolbox_prj.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..ba59cd5 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,25 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file From 97afd9c2578f7511c6610cb88dfcfecdb8f3a2cf Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 31 Oct 2023 23:34:49 +0700 Subject: [PATCH 9/9] Delete .idea directory --- .idea/GitLink.xml | 6 ----- .idea/git_toolbox_prj.xml | 15 ----------- .idea/inspectionProfiles/Project_Default.xml | 25 ------------------- .../inspectionProfiles/profiles_settings.xml | 6 ----- .idea/misc.xml | 7 ------ .idea/vcs.xml | 6 ----- 6 files changed, 65 deletions(-) delete mode 100644 .idea/GitLink.xml delete mode 100644 .idea/git_toolbox_prj.xml delete mode 100644 .idea/inspectionProfiles/Project_Default.xml delete mode 100644 .idea/inspectionProfiles/profiles_settings.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/vcs.xml diff --git a/.idea/GitLink.xml b/.idea/GitLink.xml deleted file mode 100644 index 009597c..0000000 --- a/.idea/GitLink.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/git_toolbox_prj.xml b/.idea/git_toolbox_prj.xml deleted file mode 100644 index 02b915b..0000000 --- a/.idea/git_toolbox_prj.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index ba59cd5..0000000 --- a/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2d..0000000 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file 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