mirror of
https://github.com/RYGhub/royalnet.git
synced 2024-11-26 13:04:20 +00:00
✨ Add rage command (and database functionality)
This commit is contained in:
parent
e0555d74d9
commit
6d934de234
12 changed files with 173 additions and 2 deletions
7
.gitignore
vendored
7
.gitignore
vendored
|
@ -9,3 +9,10 @@ dist/
|
||||||
|
|
||||||
# Sphinx
|
# Sphinx
|
||||||
/docs/build/
|
/docs/build/
|
||||||
|
|
||||||
|
# Royalpack
|
||||||
|
royalpack.cfg.toml
|
||||||
|
|
||||||
|
# Telethon
|
||||||
|
bot.session
|
||||||
|
bot.session-journal
|
||||||
|
|
27
poetry.lock
generated
27
poetry.lock
generated
|
@ -134,6 +134,14 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||||
[package.extras]
|
[package.extras]
|
||||||
test = ["ipaddress", "mock", "unittest2", "enum34", "pywin32", "wmi"]
|
test = ["ipaddress", "mock", "unittest2", "enum34", "pywin32", "wmi"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "psycopg2"
|
||||||
|
version = "2.8.6"
|
||||||
|
description = "psycopg2 - Python-PostgreSQL Database Adapter"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyaes"
|
name = "pyaes"
|
||||||
version = "1.6.1"
|
version = "1.6.1"
|
||||||
|
@ -301,7 +309,7 @@ multidict = ">=4.0"
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "1.1"
|
lock-version = "1.1"
|
||||||
python-versions = "^3.8"
|
python-versions = "^3.8"
|
||||||
content-hash = "18147d331322411007ead0880f9c523d0e2c9a66c194bbee8c633b4eab481e7c"
|
content-hash = "fca1f5bf509aeae1c6d05da579732826099606dba2b73210f39fef215a8859cb"
|
||||||
|
|
||||||
[metadata.files]
|
[metadata.files]
|
||||||
aiohttp = [
|
aiohttp = [
|
||||||
|
@ -493,6 +501,23 @@ psutil = [
|
||||||
{file = "psutil-5.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:f4634b033faf0d968bb9220dd1c793b897ab7f1189956e1aa9eae752527127d3"},
|
{file = "psutil-5.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:f4634b033faf0d968bb9220dd1c793b897ab7f1189956e1aa9eae752527127d3"},
|
||||||
{file = "psutil-5.8.0.tar.gz", hash = "sha256:0c9ccb99ab76025f2f0bbecf341d4656e9c1351db8cc8a03ccd62e318ab4b5c6"},
|
{file = "psutil-5.8.0.tar.gz", hash = "sha256:0c9ccb99ab76025f2f0bbecf341d4656e9c1351db8cc8a03ccd62e318ab4b5c6"},
|
||||||
]
|
]
|
||||||
|
psycopg2 = [
|
||||||
|
{file = "psycopg2-2.8.6-cp27-cp27m-win32.whl", hash = "sha256:068115e13c70dc5982dfc00c5d70437fe37c014c808acce119b5448361c03725"},
|
||||||
|
{file = "psycopg2-2.8.6-cp27-cp27m-win_amd64.whl", hash = "sha256:d160744652e81c80627a909a0e808f3c6653a40af435744de037e3172cf277f5"},
|
||||||
|
{file = "psycopg2-2.8.6-cp34-cp34m-win32.whl", hash = "sha256:b8cae8b2f022efa1f011cc753adb9cbadfa5a184431d09b273fb49b4167561ad"},
|
||||||
|
{file = "psycopg2-2.8.6-cp34-cp34m-win_amd64.whl", hash = "sha256:f22ea9b67aea4f4a1718300908a2fb62b3e4276cf00bd829a97ab5894af42ea3"},
|
||||||
|
{file = "psycopg2-2.8.6-cp35-cp35m-win32.whl", hash = "sha256:26e7fd115a6db75267b325de0fba089b911a4a12ebd3d0b5e7acb7028bc46821"},
|
||||||
|
{file = "psycopg2-2.8.6-cp35-cp35m-win_amd64.whl", hash = "sha256:00195b5f6832dbf2876b8bf77f12bdce648224c89c880719c745b90515233301"},
|
||||||
|
{file = "psycopg2-2.8.6-cp36-cp36m-win32.whl", hash = "sha256:a49833abfdede8985ba3f3ec641f771cca215479f41523e99dace96d5b8cce2a"},
|
||||||
|
{file = "psycopg2-2.8.6-cp36-cp36m-win_amd64.whl", hash = "sha256:f974c96fca34ae9e4f49839ba6b78addf0346777b46c4da27a7bf54f48d3057d"},
|
||||||
|
{file = "psycopg2-2.8.6-cp37-cp37m-win32.whl", hash = "sha256:6a3d9efb6f36f1fe6aa8dbb5af55e067db802502c55a9defa47c5a1dad41df84"},
|
||||||
|
{file = "psycopg2-2.8.6-cp37-cp37m-win_amd64.whl", hash = "sha256:56fee7f818d032f802b8eed81ef0c1232b8b42390df189cab9cfa87573fe52c5"},
|
||||||
|
{file = "psycopg2-2.8.6-cp38-cp38-win32.whl", hash = "sha256:ad2fe8a37be669082e61fb001c185ffb58867fdbb3e7a6b0b0d2ffe232353a3e"},
|
||||||
|
{file = "psycopg2-2.8.6-cp38-cp38-win_amd64.whl", hash = "sha256:56007a226b8e95aa980ada7abdea6b40b75ce62a433bd27cec7a8178d57f4051"},
|
||||||
|
{file = "psycopg2-2.8.6-cp39-cp39-win32.whl", hash = "sha256:2c93d4d16933fea5bbacbe1aaf8fa8c1348740b2e50b3735d1b0bf8154cbf0f3"},
|
||||||
|
{file = "psycopg2-2.8.6-cp39-cp39-win_amd64.whl", hash = "sha256:d5062ae50b222da28253059880a871dc87e099c25cb68acf613d9d227413d6f7"},
|
||||||
|
{file = "psycopg2-2.8.6.tar.gz", hash = "sha256:fb23f6c71107c37fd667cb4ea363ddeb936b348bbd6449278eb92c189699f543"},
|
||||||
|
]
|
||||||
pyaes = [
|
pyaes = [
|
||||||
{file = "pyaes-1.6.1.tar.gz", hash = "sha256:02c1b1405c38d3c370b085fb952dd8bea3fadcee6411ad99f312cc129c536d8f"},
|
{file = "pyaes-1.6.1.tar.gz", hash = "sha256:02c1b1405c38d3c370b085fb952dd8bea3fadcee6411ad99f312cc129c536d8f"},
|
||||||
]
|
]
|
||||||
|
|
|
@ -20,6 +20,7 @@ royalnet = "~6.1.4"
|
||||||
coloredlogs = "^15.0"
|
coloredlogs = "^15.0"
|
||||||
aiohttp = "^3.7.4"
|
aiohttp = "^3.7.4"
|
||||||
royalnet-telethon = "~0.2.0"
|
royalnet-telethon = "~0.2.0"
|
||||||
|
psycopg2 = "^2.8.6"
|
||||||
|
|
||||||
[tool.poetry.dev-dependencies]
|
[tool.poetry.dev-dependencies]
|
||||||
royalnet_console = "^0.3.0"
|
royalnet_console = "^0.3.0"
|
||||||
|
|
|
@ -6,10 +6,11 @@ import asyncio
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from . import commands
|
from . import commands
|
||||||
|
from .database import engine, base
|
||||||
|
|
||||||
logging.basicConfig(level="DEBUG")
|
logging.basicConfig(level="DEBUG")
|
||||||
|
|
||||||
config = sc.Scroll.from_file(namespace="ROYALPACK", file_path=pathlib.Path("config.toml"))
|
config = sc.Scroll.from_file(namespace="ROYALPACK", file_path=pathlib.Path("royalpack.cfg.toml"))
|
||||||
|
|
||||||
pda = rt.TelethonPDA(
|
pda = rt.TelethonPDA(
|
||||||
tg_api_id=config["tapi.id"],
|
tg_api_id=config["tapi.id"],
|
||||||
|
@ -23,6 +24,12 @@ pda.register_partial(commands.cat, ["cat"])
|
||||||
pda.register_partial(commands.color, ["color"])
|
pda.register_partial(commands.color, ["color"])
|
||||||
pda.register_partial(commands.ping, ["ping"])
|
pda.register_partial(commands.ping, ["ping"])
|
||||||
pda.register_partial(commands.ship, ["ship"])
|
pda.register_partial(commands.ship, ["ship"])
|
||||||
|
pda.register_partial(commands.rage_show, ["rage"])
|
||||||
|
pda.register_partial(commands.rage_add, ["rage"])
|
||||||
|
|
||||||
|
|
||||||
|
_engine = engine.lazy_engine.evaluate()
|
||||||
|
base.Base.metadata.create_all(_engine)
|
||||||
|
|
||||||
|
|
||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
|
|
|
@ -4,3 +4,4 @@ from .cat import *
|
||||||
from .color import *
|
from .color import *
|
||||||
from .ping import *
|
from .ping import *
|
||||||
from .ship import *
|
from .ship import *
|
||||||
|
from .rage import *
|
||||||
|
|
50
royalpack/commands/rage.py
Normal file
50
royalpack/commands/rage.py
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
import royalnet.engineer as engi
|
||||||
|
from ..database.engine import lazy_Session
|
||||||
|
from ..database.tables import Rage
|
||||||
|
import sqlalchemy as s
|
||||||
|
|
||||||
|
|
||||||
|
@engi.PartialCommand.new(syntax="")
|
||||||
|
async def rage_show(*, _sentry: engi.Sentry, _msg: engi.Message, **__):
|
||||||
|
"""
|
||||||
|
A-N-G-E-R-Y!
|
||||||
|
Invia in chat qualcosa che ha fatto arrabbiare un membro anonimo della RYG.
|
||||||
|
"""
|
||||||
|
|
||||||
|
Session = lazy_Session.evaluate()
|
||||||
|
with Session(future=True) as session:
|
||||||
|
|
||||||
|
rage = session.execute(
|
||||||
|
s.select(Rage).order_by(s.func.random())
|
||||||
|
).scalar()
|
||||||
|
|
||||||
|
if rage is None:
|
||||||
|
await _msg.reply(text=f"😐 Alla fine, non è che sei così arrabbiato...")
|
||||||
|
else:
|
||||||
|
await _msg.reply(text=f"😡 {rage.reason}")
|
||||||
|
|
||||||
|
|
||||||
|
@engi.PartialCommand.new(syntax="(?P<reason>.+)")
|
||||||
|
async def rage_add(*, _sentry: engi.Sentry, _msg: engi.Message, reason: str, **__):
|
||||||
|
"""
|
||||||
|
A-N-G-E-R-Y!
|
||||||
|
Aggiungi al database qualcosa che ti ha fatto arrabbiare tantissimo.
|
||||||
|
"""
|
||||||
|
Session = lazy_Session.evaluate()
|
||||||
|
with Session(future=True) as session:
|
||||||
|
|
||||||
|
rage = Rage(reason=reason)
|
||||||
|
session.add(rage)
|
||||||
|
session.commit()
|
||||||
|
|
||||||
|
count = session.execute(
|
||||||
|
s.select(s.func.count()).select_from(s.select(Rage).subquery())
|
||||||
|
).scalar()
|
||||||
|
|
||||||
|
await _msg.reply(text=f"😡 G{'R' * count}!")
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = (
|
||||||
|
"rage_show",
|
||||||
|
"rage_add",
|
||||||
|
)
|
11
royalpack/config.py
Normal file
11
royalpack/config.py
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
import pathlib
|
||||||
|
import royalnet.scrolls as s
|
||||||
|
import royalnet.lazy as l
|
||||||
|
|
||||||
|
|
||||||
|
lazy_config = l.Lazy(lambda: s.Scroll.from_file("ROYALPACK", pathlib.Path("royalpack.cfg.toml")))
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = (
|
||||||
|
"lazy_config",
|
||||||
|
)
|
10
royalpack/database/base.py
Normal file
10
royalpack/database/base.py
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
from __future__ import annotations
|
||||||
|
import sqlalchemy.ext.declarative as sed
|
||||||
|
|
||||||
|
|
||||||
|
Base: sed.declarative_base = sed.declarative_base()
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = (
|
||||||
|
"Base",
|
||||||
|
)
|
24
royalpack/database/engine.py
Normal file
24
royalpack/database/engine.py
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
import sqlalchemy.orm
|
||||||
|
import royalnet.lazy
|
||||||
|
|
||||||
|
from ..config import *
|
||||||
|
|
||||||
|
# noinspection PyUnresolvedReferences
|
||||||
|
from . import tables
|
||||||
|
|
||||||
|
|
||||||
|
lazy_engine = royalnet.lazy.Lazy(lambda c: sqlalchemy.create_engine(c["database.uri"]), c=lazy_config)
|
||||||
|
"""
|
||||||
|
The uninitialized sqlalchemy engine.
|
||||||
|
"""
|
||||||
|
|
||||||
|
lazy_Session = royalnet.lazy.Lazy(lambda e: sqlalchemy.orm.sessionmaker(bind=e), e=lazy_engine)
|
||||||
|
"""
|
||||||
|
The uninitialized Session.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = (
|
||||||
|
"lazy_engine",
|
||||||
|
"lazy_Session",
|
||||||
|
)
|
1
royalpack/database/tables/__init__.py
Normal file
1
royalpack/database/tables/__init__.py
Normal file
|
@ -0,0 +1 @@
|
||||||
|
from .rage import *
|
19
royalpack/database/tables/_imports.py
Normal file
19
royalpack/database/tables/_imports.py
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
from ..base import Base
|
||||||
|
|
||||||
|
import royalnet.royaltyping as t
|
||||||
|
import royalnet.alchemist as a
|
||||||
|
|
||||||
|
import sqlalchemy as s
|
||||||
|
import sqlalchemy.orm as o
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = (
|
||||||
|
"Base",
|
||||||
|
"t",
|
||||||
|
"a",
|
||||||
|
"s",
|
||||||
|
"o",
|
||||||
|
"datetime",
|
||||||
|
)
|
15
royalpack/database/tables/rage.py
Normal file
15
royalpack/database/tables/rage.py
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
from __future__ import annotations
|
||||||
|
from ._imports import *
|
||||||
|
|
||||||
|
|
||||||
|
class Rage(Base):
|
||||||
|
__tablename__ = "rage"
|
||||||
|
|
||||||
|
id = s.Column(s.Integer, primary_key=True)
|
||||||
|
|
||||||
|
reason = s.Column(s.Text, nullable=False)
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = (
|
||||||
|
"Rage",
|
||||||
|
)
|
Loading…
Reference in a new issue