diff --git a/poetry.lock b/poetry.lock index 5b687bff..373836d4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -26,17 +26,16 @@ python-versions = ">=3.5.3" [[package]] name = "attrs" -version = "19.3.0" +version = "20.1.0" description = "Classes Without Boilerplate" category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.extras] -azure-pipelines = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "pytest-azurepipelines"] -dev = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "sphinx", "pre-commit"] -docs = ["sphinx", "zope.interface"] -tests = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] +dev = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "sphinx", "sphinx-rtd-theme", "pre-commit"] +docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] [[package]] name = "bcrypt" @@ -369,7 +368,7 @@ requests = "*" [[package]] name = "royalnet" -version = "5.11.0" +version = "5.11.2" description = "A multipurpose bot and web framework" category = "main" optional = false @@ -623,7 +622,7 @@ multidict = ">=4.0" [metadata] lock-version = "1.0" python-versions = "^3.8" -content-hash = "b45296e9be3f2ad43dd04bc9359fd9bfce913970a0dc06dd6027726bfa8c9858" +content-hash = "18a585dcd6662c69d9fd39c9c683270e55ff4636addc591f539385f844a9f9d9" [metadata.files] aiohttp = [ @@ -645,8 +644,8 @@ async-timeout = [ {file = "async_timeout-3.0.1-py3-none-any.whl", hash = "sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3"}, ] attrs = [ - {file = "attrs-19.3.0-py2.py3-none-any.whl", hash = "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c"}, - {file = "attrs-19.3.0.tar.gz", hash = "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"}, + {file = "attrs-20.1.0-py2.py3-none-any.whl", hash = "sha256:2867b7b9f8326499ab5b0e2d12801fa5c98842d2cbd22b35112ae04bf85b4dff"}, + {file = "attrs-20.1.0.tar.gz", hash = "sha256:0ef97238856430dcf9228e07f316aefc17e8939fc8507e18c6501b761ef1a42a"}, ] bcrypt = [ {file = "bcrypt-3.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c95d4cbebffafcdd28bd28bb4e25b31c50f6da605c81ffd9ad8a3d1b2ab7b1b6"}, @@ -920,8 +919,8 @@ riotwatcher = [ {file = "riotwatcher-3.0.0.tar.gz", hash = "sha256:bf8b8eb7e13c794730c18cd7846513cf22295a068204433117ce4d83a25b0fd2"}, ] royalnet = [ - {file = "royalnet-5.11.0-py3-none-any.whl", hash = "sha256:cb2ed753044ae563b73389acce4c9c0b0b4a4cb2cb5bc2bc0197a91478a12575"}, - {file = "royalnet-5.11.0.tar.gz", hash = "sha256:aab356a1a845a893c2f1c4e96ec01faf799c9efb5041451a25aa3264f8926859"}, + {file = "royalnet-5.11.2-py3-none-any.whl", hash = "sha256:443c5e27dd60767ed88530f5c16d349a7353fbdd9177e0c6260d230565db2bc1"}, + {file = "royalnet-5.11.2.tar.gz", hash = "sha256:95368b1f0ffa3390876643d3958dc3e8d62c788d78a5487213a204ebe4f3dfe7"}, ] royalspells = [ {file = "royalspells-3.2.tar.gz", hash = "sha256:2bd4a9a66514532e35c02c3907425af48c7cb292364c4843c795719a82b25dfe"}, diff --git a/pyproject.toml b/pyproject.toml index ecba6195..d65f5481 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,7 +28,7 @@ itsdangerous = "^1.1.0" [tool.poetry.dependencies.royalnet] - version = "~5.11.0" + version = "~5.11.2" # Maybe... there is a way to make these selectable? extras = [ "telegram", diff --git a/royalpack/commands/__init__.py b/royalpack/commands/__init__.py index 73d1ad3c..a48a5292 100644 --- a/royalpack/commands/__init__.py +++ b/royalpack/commands/__init__.py @@ -22,7 +22,7 @@ from .help import HelpCommand from .leagueoflegends import LeagueoflegendsCommand from .magickfiorygi import MagickfiorygiCommand from .magicktreasure import MagicktreasureCommand -from .matchmaking import MatchmakingCommand +# from .matchmaking import MatchmakingCommand from .ping import PingCommand from .pmots import PmotsCommand from .dog import DogCommand @@ -63,7 +63,7 @@ available_commands = [ LeagueoflegendsCommand, MagickfiorygiCommand, MagicktreasureCommand, - MatchmakingCommand, + # MatchmakingCommand, PingCommand, PmotsCommand, DogCommand, diff --git a/royalpack/events/__init__.py b/royalpack/events/__init__.py index 03ae8b08..55b6dac6 100644 --- a/royalpack/events/__init__.py +++ b/royalpack/events/__init__.py @@ -1,25 +1,11 @@ # Imports go here! from .discord_cv import DiscordCvEvent -from .discord_summon import DiscordSummonEvent -from .discord_play import DiscordPlayEvent -from .discord_skip import DiscordSkipEvent -from .discord_queue import DiscordQueueEvent -from .discord_pause import DiscordPauseEvent -from .discord_playable import DiscordPlaymodeEvent -from .discord_lazy_play import DiscordLazyPlayEvent from .telegram_message import TelegramMessageEvent from .pong import PongEvent # Enter the commands of your Pack here! available_events = [ DiscordCvEvent, - DiscordSummonEvent, - DiscordPlayEvent, - DiscordSkipEvent, - DiscordQueueEvent, - DiscordPauseEvent, - DiscordPlaymodeEvent, - DiscordLazyPlayEvent, TelegramMessageEvent, PongEvent, ] diff --git a/royalpack/utils/__init__.py b/royalpack/utils/__init__.py index 554230b4..6604ef62 100644 --- a/royalpack/utils/__init__.py +++ b/royalpack/utils/__init__.py @@ -1,9 +1,5 @@ -from .royalqueue import RoyalQueue -from .royalpool import RoyalPool -from .mmtask import MMTask +# from .mmtask import MMTask __all__ = [ - "RoyalQueue", - "RoyalPool", - "MMTask", + # "MMTask", ] diff --git a/royalpack/utils/mmtask.py b/royalpack/utils/mmtask.py index 3c92f076..b48bbd24 100644 --- a/royalpack/utils/mmtask.py +++ b/royalpack/utils/mmtask.py @@ -162,28 +162,30 @@ class MMTask: user = await data.get_author(error_if_none=True) # Get the related MMEvent - mmevent: MMEvent = await ru.asyncify(data.session.query(self._EventT).get, self.mmid) + async with data.session_acm() as session: + mmevent: MMEvent = await ru.asyncify(session.query(self._EventT).get, self.mmid) - # Check if the user had already responded - mmresponse: MMResponse = await ru.asyncify( - data.session.query(self._ResponseT).filter_by(user=user, mmevent=mmevent).one_or_none - ) + # Check if the user had already responded + mmresponse: MMResponse = await ru.asyncify( + session.query(self._ResponseT).filter_by(user=user, mmevent=mmevent).one_or_none + ) - if mmresponse is None: - # If they didn't respond, create a new MMResponse - mmresponse = self._ResponseT(user=user, mmevent=mmevent, choice=choice) - data.session.add(mmresponse) + if mmresponse is None: + # If they didn't respond, create a new MMResponse + # noinspection PyArgumentList + mmresponse = self._ResponseT(user=user, mmevent=mmevent, choice=choice) + session.add(mmresponse) - # Drop fiorygi - if random.randrange(100) < self.command.config["Matchmaking"]["fiorygi_award_chance"]: - await FiorygiTransaction.spawn_fiorygi(data, user, 1, "aver risposto a un matchmaking") - else: - # Change their response - mmresponse.choice = choice - try: - await data.session_commit() - except psycopg2.Error: - raise rc.UserError("Hai già risposto nello stesso modo a questo matchmaking.") + # Drop fiorygi + if random.randrange(100) < self.command.config["Matchmaking"]["fiorygi_award_chance"]: + await FiorygiTransaction.spawn_fiorygi(data, user, 1, "aver risposto a un matchmaking") + else: + # Change their response + mmresponse.choice = choice + try: + await ru.asyncify(session.commit) + except psycopg2.Error: + raise rc.UserError("Hai già risposto nello stesso modo a questo matchmaking.") await self.telegram_channel_message_update() @@ -196,7 +198,8 @@ class MMTask: user = await data.get_author(error_if_none=True) # Get the related MMEvent - mmevent: MMEvent = await ru.asyncify(data.session.query(self._EventT).get, self.mmid) + async with data.session_acm() as session: + mmevent: MMEvent = await ru.asyncify(session.query(self._EventT).get, self.mmid) # Ensure the user has the required roles to start the matchmaking if user != mmevent.creator and "admin" not in user.roles: @@ -214,7 +217,8 @@ class MMTask: user = await data.get_author(error_if_none=True) # Get the related MMEvent - mmevent: MMEvent = await ru.asyncify(data.session.query(self._EventT).get, self.mmid) + async with data.session_acm() as session: + mmevent: MMEvent = await ru.asyncify(session.query(self._EventT).get, self.mmid) # Ensure the user has the required roles to start the matchmaking if user != mmevent.creator and "admin" not in user.roles: @@ -233,19 +237,16 @@ class MMTask: rows.append([ rc.KeyboardKey( - interface=self.command.interface, short=f"{MMChoice.YES.value}", text="Ci sarò!", callback=self.get_answer_callback(MMChoice.YES) ), rc.KeyboardKey( - interface=self.command.interface, short=f"{MMChoice.MAYBE.value}", text="Forse...", callback=self.get_answer_callback(MMChoice.MAYBE) ), rc.KeyboardKey( - interface=self.command.interface, short=f"{MMChoice.NO.value}", text="Non mi interessa.", callback=self.get_answer_callback(MMChoice.NO) @@ -255,19 +256,16 @@ class MMTask: if self._mmevent.datetime is not None: rows.append([ rc.KeyboardKey( - interface=self.command.interface, short=f"{MMChoice.LATE_SHORT.value}", text="10 min", callback=self.get_answer_callback(MMChoice.LATE_SHORT) ), rc.KeyboardKey( - interface=self.command.interface, short=f"{MMChoice.LATE_MEDIUM.value}", text="30 min", callback=self.get_answer_callback(MMChoice.LATE_MEDIUM) ), rc.KeyboardKey( - interface=self.command.interface, short=f"{MMChoice.LATE_LONG.value}", text="60 min", callback=self.get_answer_callback(MMChoice.LATE_LONG) @@ -276,13 +274,11 @@ class MMTask: rows.append([ rc.KeyboardKey( - interface=self.command.interface, short=f"🗑", text="Elimina", callback=self.get_delete_callback() ), rc.KeyboardKey( - interface=self.command.interface, short=f"🚩", text="Inizia", callback=self.get_start_callback() @@ -319,13 +315,13 @@ class MMTask: for x, row in enumerate(inkm.inline_keyboard): for y, key in enumerate(row): key: InKB - self.command.interface.serf.register_keyboard_key(key.callback_data, key=royalnet_keyboard[x][y]) + self.command.serf.register_keyboard_key(key.callback_data, key=royalnet_keyboard[x][y]) def unregister_telegram_keyboard(self, inkm: InKM): for row in inkm.inline_keyboard: for key in row: key: InKB - self.command.interface.serf.unregister_keyboard_key(key.callback_data) + self.command.serf.unregister_keyboard_key(key.callback_data) async def wait_until_due(self): """When the event is due, interrupt the MMTask with the TIME_RAN_OUT reason.""" @@ -356,8 +352,8 @@ class MMTask: if self._mmevent.interface_data is None: # Send the channel message log.debug(f"Sending message for: {self.mmid}") - message: PTBMessage = await self.command.interface.serf.api_call( - self.command.interface.serf.client.send_message, + message: PTBMessage = await self.command.serf.api_call( + self.command.serf.client.send_message, chat_id=self.telegram_channel_id, text=rst.escape(self.channel_text), parse_mode="HTML", @@ -377,8 +373,8 @@ class MMTask: # Delete the channel message log.debug(f"Deleting message for: {self.mmid}") - await self.command.interface.serf.api_call( - self.command.interface.serf.client.delete_message, + await self.command.serf.api_call( + self.command.serf.client.delete_message, chat_id=self._mmevent.interface_data.chat_id, message_id=self._mmevent.interface_data.message_id ) @@ -391,7 +387,7 @@ class MMTask: log.debug(f"Updating message for: {self.mmid}") try: await ru.asyncify( - self.command.interface.serf.client.edit_message_text, + self.command.serf.client.edit_message_text, chat_id=self._mmevent.interface_data.chat_id, text=rst.escape(self.channel_text), message_id=self._mmevent.interface_data.message_id, @@ -403,8 +399,8 @@ class MMTask: log.warning(f"TelegramError during update: {e}") async def telegram_group_message_start(self): - await self.command.interface.serf.api_call( - self.command.interface.serf.client.send_message, + await self.command.serf.api_call( + self.command.serf.client.send_message, chat_id=self.telegram_group_id, text=rst.escape(self.start_text), parse_mode="HTML", @@ -412,8 +408,8 @@ class MMTask: ) async def telegram_group_message_delete(self): - await self.command.interface.serf.api_call( - self.command.interface.serf.client.send_message, + await self.command.serf.api_call( + self.command.serf.client.send_message, chat_id=self.telegram_group_id, text=rst.escape(self.delete_text), parse_mode="HTML", @@ -457,4 +453,4 @@ class MMTask: await self.telegram_group_message_delete() # Close the database session - await ru.asyncify(self._session.close) \ No newline at end of file + await ru.asyncify(self._session.close)