mirror of
https://github.com/RYGhub/royalnet.git
synced 2024-11-23 11:34:18 +00:00
✨ Add Discord login support
This commit is contained in:
parent
521b3d9251
commit
c8d187d100
2 changed files with 66 additions and 1 deletions
|
@ -83,11 +83,37 @@ register_telegram(tg_router, commands.fiorygi_transactions_other, ["transactions
|
||||||
register_telegram(tg_router, commands.fiorygi_dig, ["dig"], r"(?P<slug>[a-z0-9-]+)")
|
register_telegram(tg_router, commands.fiorygi_dig, ["dig"], r"(?P<slug>[a-z0-9-]+)")
|
||||||
register_telegram(tg_router, commands.fiorygi_bury, ["bury"], r"(?P<slug>[a-z0-9-]+)\s+(?P<value>[0-9]+)(?:\s+(?P<message>.+))?")
|
register_telegram(tg_router, commands.fiorygi_bury, ["bury"], r"(?P<slug>[a-z0-9-]+)\s+(?P<value>[0-9]+)(?:\s+(?P<message>.+))?")
|
||||||
register_telegram(tg_router, commands.version, ["version"])
|
register_telegram(tg_router, commands.version, ["version"])
|
||||||
register_telegram(tg_router, commands.cv, ["cv"])
|
register_telegram(tg_router, commands.cv, ["cv", "civù"])
|
||||||
|
|
||||||
ds_router = engi.Router()
|
ds_router = engi.Router()
|
||||||
|
|
||||||
|
register_discord(ds_router, commands.ahnonlosoio, ["ahnonlosoio"])
|
||||||
|
register_discord(ds_router, commands.answer, ["answer"], r".+")
|
||||||
|
register_discord(ds_router, commands.cat, ["cat", "catto", "gatto", "nyaa", "nya"])
|
||||||
|
register_discord(ds_router, commands.ciaoruozi, ["ciaoruozi"])
|
||||||
|
register_discord(ds_router, commands.color, ["color"])
|
||||||
register_discord(ds_router, commands.ping, ["ping"])
|
register_discord(ds_router, commands.ping, ["ping"])
|
||||||
|
register_discord(ds_router, commands.ship, ["ship"], r"(?P<first>[A-Za-z]+)[\s+&]+(?P<second>[A-Za-z]+)")
|
||||||
|
register_discord(ds_router, commands.emojify, ["emojify"], r"(?P<message>.+)")
|
||||||
|
register_discord(ds_router, commands.dog_any, ["dog", "doggo", "cane", "woof", "bau"])
|
||||||
|
register_discord(ds_router, commands.dog_breedlist, ["dog", "doggo", "cane", "woof", "bau"], r"(?:list|help|aiuto)")
|
||||||
|
register_discord(ds_router, commands.dog_breed, ["dog", "doggo", "cane", "woof", "bau"], r"(?P<breed>[A-Za-z/]+)")
|
||||||
|
register_discord(ds_router, commands.fortune, ["fortune"])
|
||||||
|
register_discord(ds_router, commands.pmots, ["pmots"])
|
||||||
|
register_discord(ds_router, commands.spell, ["spell", "cast"], r"(?P<spellname>.+)")
|
||||||
|
register_discord(ds_router, commands.smecds, ["smecds"])
|
||||||
|
register_discord(ds_router, commands.man, ["man", "help"], r"(?P<commandname>[A-Za-z]+)")
|
||||||
|
register_discord(ds_router, commands.login, ["login"])
|
||||||
|
register_discord(ds_router, commands.whoami, ["whoami"])
|
||||||
|
register_discord(ds_router, commands.fiorygi_balance_self, ["balance"])
|
||||||
|
register_discord(ds_router, commands.fiorygi_balance_other, ["balance"], r"(?P<target>\S+)")
|
||||||
|
register_discord(ds_router, commands.fiorygi_give, ["give"], r"(?P<target>\S+)\s+(?P<amount>[0-9]+)\s+(?P<reason>.+)")
|
||||||
|
register_discord(ds_router, commands.fiorygi_magick, ["magick"], r"(?P<target>\S+)\s+(?P<amount>[0-9]+)\s+(?P<reason>.+)")
|
||||||
|
register_discord(ds_router, commands.fiorygi_transactions_self, ["transactions"])
|
||||||
|
register_discord(ds_router, commands.fiorygi_transactions_other, ["transactions"], r"(?P<target>\S+)")
|
||||||
|
register_discord(ds_router, commands.fiorygi_dig, ["dig"], r"(?P<slug>[a-z0-9-]+)")
|
||||||
|
register_discord(ds_router, commands.fiorygi_bury, ["bury"], r"(?P<slug>[a-z0-9-]+)\s+(?P<value>[0-9]+)(?:\s+(?P<message>.+))?")
|
||||||
|
register_discord(ds_router, commands.version, ["version"])
|
||||||
|
|
||||||
pda.implementations["telethon.1"].register_conversation(tg_router)
|
pda.implementations["telethon.1"].register_conversation(tg_router)
|
||||||
pda.implementations["discordpy.2"].register_conversation(ds_router)
|
pda.implementations["discordpy.2"].register_conversation(ds_router)
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
|
import discord
|
||||||
import royalnet.royaltyping as t
|
import royalnet.royaltyping as t
|
||||||
import royalnet.engineer as engi
|
import royalnet.engineer as engi
|
||||||
import sqlalchemy.orm as so
|
import sqlalchemy.orm as so
|
||||||
import royalpack.database as db
|
import royalpack.database as db
|
||||||
import royalpack.config as cfg
|
import royalpack.config as cfg
|
||||||
import royalnet_telethon.bullet.contents
|
import royalnet_telethon.bullet.contents
|
||||||
|
import royalnet_discordpy
|
||||||
import aiohttp
|
import aiohttp
|
||||||
import asyncio
|
import asyncio
|
||||||
import logging
|
import logging
|
||||||
|
@ -84,6 +86,16 @@ async def login(*, _msg: engi.Message, _session: so.Session, _imp, **__):
|
||||||
log.debug(f"Done, notifying the user...")
|
log.debug(f"Done, notifying the user...")
|
||||||
await private.send_message(text=f"↔️ Sincronizzazione con Telegram riuscita! Sei loggato come {tg.mention()}!")
|
await private.send_message(text=f"↔️ Sincronizzazione con Telegram riuscita! Sei loggato come {tg.mention()}!")
|
||||||
|
|
||||||
|
elif isinstance(_imp, royalnet_discordpy.DiscordpyPDAImplementation):
|
||||||
|
sender = await _msg.sender
|
||||||
|
tg = await register_user_discord(session=_session, user_info=ui, discord_user=sender._user)
|
||||||
|
|
||||||
|
log.debug(f"Committing session...")
|
||||||
|
_session.commit()
|
||||||
|
|
||||||
|
log.debug(f"Done, notifying the user...")
|
||||||
|
await private.send_message(text=f"↔️ Sincronizzazione con Telegram riuscita! Sei loggato come {tg.mention()}!")
|
||||||
|
|
||||||
|
|
||||||
async def enforce_private_message(msg: engi.Message) -> engi.Channel:
|
async def enforce_private_message(msg: engi.Message) -> engi.Channel:
|
||||||
"""
|
"""
|
||||||
|
@ -314,4 +326,31 @@ async def register_user_telethon(
|
||||||
return tg
|
return tg
|
||||||
|
|
||||||
|
|
||||||
|
async def register_user_discord(
|
||||||
|
session: so.Session,
|
||||||
|
user_info: dict[str, t.Any],
|
||||||
|
discord_user: discord.User,
|
||||||
|
) -> db.DiscordAccount:
|
||||||
|
"""
|
||||||
|
Sync an user's Discord account via a Discord.py message.
|
||||||
|
|
||||||
|
:param session: The :class:`~.so.Session` to use.
|
||||||
|
:param user_info: The user_info obtained by the Identity Provider.
|
||||||
|
:param discord_user: The Discord.py user to base the user data on.
|
||||||
|
:return: The created/updated :class:`~.db.DiscordAccount`
|
||||||
|
"""
|
||||||
|
|
||||||
|
log.debug("Syncing telethon user...")
|
||||||
|
|
||||||
|
ds = db.DiscordAccount(
|
||||||
|
user_fk=user_info["sub"],
|
||||||
|
id=discord_user.id,
|
||||||
|
username=discord_user.name,
|
||||||
|
discriminator=discord_user.discriminator,
|
||||||
|
avatar_url=str(discord_user.avatar_url),
|
||||||
|
)
|
||||||
|
session.merge(ds)
|
||||||
|
return ds
|
||||||
|
|
||||||
|
|
||||||
__all__ = ("login",)
|
__all__ = ("login",)
|
||||||
|
|
Loading…
Reference in a new issue