From 461127a4ac09dfbb3879d76b91c95fe0f22233fa Mon Sep 17 00:00:00 2001 From: alemi Date: Mon, 29 Jan 2024 03:27:13 +0100 Subject: [PATCH] chore: restructured and packaged --- .editorconfig | 10 + .gitignore | 132 +++++ README.md | 122 +++- appservice/README.md | 111 ---- appservice/requirements.txt | 4 - bridge/README.md | 31 - bridge/bridge.py | 602 -------------------- bridge/cogs/.keep | 0 bridge/requirements.txt | 2 - demo.png | Bin 165029 -> 0 bytes misc/migrate_emotes.py | 160 ------ pyproject.toml | 30 + {appservice => src/aioappsrv}/appservice.py | 0 {appservice => src/aioappsrv}/cache.py | 0 {appservice => src/aioappsrv}/db.py | 0 {appservice => src/aioappsrv}/discord.py | 0 {appservice => src/aioappsrv}/errors.py | 0 {appservice => src/aioappsrv}/gateway.py | 0 {appservice => src/aioappsrv}/main.py | 0 {appservice => src/aioappsrv}/matrix.py | 0 {appservice => src/aioappsrv}/misc.py | 0 21 files changed, 273 insertions(+), 931 deletions(-) create mode 100644 .editorconfig create mode 100644 .gitignore delete mode 100644 appservice/README.md delete mode 100644 appservice/requirements.txt delete mode 100644 bridge/README.md delete mode 100644 bridge/bridge.py delete mode 100644 bridge/cogs/.keep delete mode 100644 bridge/requirements.txt delete mode 100644 demo.png delete mode 100644 misc/migrate_emotes.py create mode 100644 pyproject.toml rename {appservice => src/aioappsrv}/appservice.py (100%) rename {appservice => src/aioappsrv}/cache.py (100%) rename {appservice => src/aioappsrv}/db.py (100%) rename {appservice => src/aioappsrv}/discord.py (100%) rename {appservice => src/aioappsrv}/errors.py (100%) rename {appservice => src/aioappsrv}/gateway.py (100%) rename {appservice => src/aioappsrv}/main.py (100%) rename {appservice => src/aioappsrv}/matrix.py (100%) rename {appservice => src/aioappsrv}/misc.py (100%) diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..68dc435 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,10 @@ +# Unix-style newlines with a newline ending every file +[*] +charset = utf-8 +indent_style = tab +end_of_line = lf +insert_final_newline = true + +[*.py] +indent_size = 4 + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9f60581 --- /dev/null +++ b/.gitignore @@ -0,0 +1,132 @@ +# 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/ +pip-wheel-metadata/ +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/ + +# 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 +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.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 + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__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/ + +# Auto generated version file +src/aioappsrv/__version__.py diff --git a/README.md b/README.md index f0d19f9..0399257 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,111 @@ -# matrix-discord-bridge +## Installation -A simple bridge between Matrix and Discord written in Python. +`pip install -r requirements.txt` -This repository contains two bridges: +## Usage -* A [puppeting appservice](appservice): The puppeting bridge written with minimal dependencies. Running this requires a self-hosted homeserver. +* Run `main.py` to generate `appservice.json` -* A [non-puppeting bridge](bridge): The non-puppeting plaintext bridge written with `matrix-nio` and `discord.py`, most people would want to use this one if running on heroku or similar and don't have their own server. **NOTE:** This is unmaintained and might break in the future due to Discord changes. +* Edit `appservice.json`: -Check their READMEs for specific information. +``` +{ + "as_token": "my-secret-as-token", + "hs_token": "my-secret-hs-token", + "user_id": "appservice-discord", + "homeserver": "http://127.0.0.1:8008", + "server_name": "localhost", + "discord_token": "my-secret-discord-token", + "port": 5000, + "database": "/path/to/bridge.db" +} +``` -![Demo](demo.png) +`as_token`: The token sent by the appservice to the homeserver with events. -## What Works +`hs_token`: The token sent by the homeserver to the appservice with events. -- [x] Puppeting (Appservice only, regular bridge only uses webhooks on Discord.) -- [x] Attachments (Converted to URLs.) -- [x] Typing Indicators (Per-user indicators on Appservice, otherwise sent as bot user.) -- [x] Message redaction -- [x] Replies -- [x] Bridging multiple channels -- [x] Discord emojis displayed as inline images -- [x] Sending Discord emotes from Matrix (`:emote_name:`) -- [x] Mentioning Discord users via partial username (`@partialname`) +`user_id`: The username of the appservice user, it should match the `sender_localpart` in `appservice.yaml`. -## TODO +`homeserver`: A URL including the port where the homeserver is listening on. The default should work in most cases where the homeserver is running locally and listening for non-TLS connections on port `8008`. -- [ ] Handle cases where the webhook is messed with on the Discord side (Deleted/Edited by someone other than the bot). -- [ ] Use embeds on Discord side for replies. -- [ ] Unbridging. +`server_name`: The server's name, it is the part after `:` in MXIDs. As an example, `kde.org` is the server name in `@testuser:kde.org`. + +`discord_token`: The Discord bot's token. + +`port`: The port where `bottle` will listen for events. + +`database`: Full path to the bridge's database. + +Both `as_token` and `hs_token` MUST be the same as their values in `appservice.yaml`. Their value can be set to anything, refer to the [spec](https://matrix.org/docs/spec/application_service/r0.1.2#registration). + +* Create `appservice.yaml` and add it to your homeserver: + +``` +id: "discord" +url: "http://127.0.0.1:5000" +as_token: "my-secret-as-token" +hs_token: "my-secret-hs-token" +sender_localpart: "appservice-discord" +namespaces: + users: + - exclusive: true + regex: "@_discord.*" + - exclusive: true + regex: "@appservice-discord" + aliases: + - exclusive: true + regex: "#_discord.*" + rooms: [] +``` + +The following lines should be added to the homeserver configuration. The full path to `appservice.yaml` might be required: + +* `synapse`: + +``` +# A list of application service config files to use +# +app_service_config_files: + - appservice.yaml +``` + +* `dendrite`: + +``` +app_service_api: + internal_api: + # ... + database: + # ... + config_files: [appservice.yaml] +``` + +A path can optionally be passed as the first argument to `main.py`. This path will be used as the base directory for the database and log file. + +Eg. Running `python3 main.py /path/to/my/dir` will store the database and logs in `/path/to/my/dir`. +`$PWD` is used by default if no path is specified. + +After setting up the bridge, send a direct message to `@appservice-discord:domain.tld` containing the channel ID to be bridged (`!bridge 123456`). + +This bridge is written with: + +* `bottle`: Receiving events from the homeserver. +* `urllib3`: Sending requests, thread safety. +* `websockets`: Connecting to Discord. (Big thanks to an anonymous person "nesslersreagent" for figuring out the initial connection mess.) + +## NOTES + +* A basic sqlite database is used for keeping track of bridged rooms. + +* Discord users can be tagged only by mentioning the dummy Matrix user, which requires the client to send a formatted body containing HTML. Partial mentions are not used to avoid unreliable queries to the websocket. + +* Logs are saved to the `appservice.log` file in `$PWD` or the specified directory. + +* For avatars to show up on Discord, you must have a [reverse proxy](https://github.com/matrix-org/dendrite/blob/master/docs/nginx/monolith-sample.conf) set up on your homeserver as the bridge does not specify the homeserver port when passing the avatar url. + +* It is not possible to add "normal" Discord bot functionality like commands as this bridge does not use `discord.py`. + +* [Privileged Intents](https://discordpy.readthedocs.io/en/latest/intents.html#privileged-intents) for members and presence must be enabled for your Discord bot. + +* This Appservice might not work well for bridging a large number of rooms since it is mostly synchronous. However, it wouldn't take much effort to port it to `asyncio` and `aiohttp` if desired. diff --git a/appservice/README.md b/appservice/README.md deleted file mode 100644 index 0399257..0000000 --- a/appservice/README.md +++ /dev/null @@ -1,111 +0,0 @@ -## Installation - -`pip install -r requirements.txt` - -## Usage - -* Run `main.py` to generate `appservice.json` - -* Edit `appservice.json`: - -``` -{ - "as_token": "my-secret-as-token", - "hs_token": "my-secret-hs-token", - "user_id": "appservice-discord", - "homeserver": "http://127.0.0.1:8008", - "server_name": "localhost", - "discord_token": "my-secret-discord-token", - "port": 5000, - "database": "/path/to/bridge.db" -} -``` - -`as_token`: The token sent by the appservice to the homeserver with events. - -`hs_token`: The token sent by the homeserver to the appservice with events. - -`user_id`: The username of the appservice user, it should match the `sender_localpart` in `appservice.yaml`. - -`homeserver`: A URL including the port where the homeserver is listening on. The default should work in most cases where the homeserver is running locally and listening for non-TLS connections on port `8008`. - -`server_name`: The server's name, it is the part after `:` in MXIDs. As an example, `kde.org` is the server name in `@testuser:kde.org`. - -`discord_token`: The Discord bot's token. - -`port`: The port where `bottle` will listen for events. - -`database`: Full path to the bridge's database. - -Both `as_token` and `hs_token` MUST be the same as their values in `appservice.yaml`. Their value can be set to anything, refer to the [spec](https://matrix.org/docs/spec/application_service/r0.1.2#registration). - -* Create `appservice.yaml` and add it to your homeserver: - -``` -id: "discord" -url: "http://127.0.0.1:5000" -as_token: "my-secret-as-token" -hs_token: "my-secret-hs-token" -sender_localpart: "appservice-discord" -namespaces: - users: - - exclusive: true - regex: "@_discord.*" - - exclusive: true - regex: "@appservice-discord" - aliases: - - exclusive: true - regex: "#_discord.*" - rooms: [] -``` - -The following lines should be added to the homeserver configuration. The full path to `appservice.yaml` might be required: - -* `synapse`: - -``` -# A list of application service config files to use -# -app_service_config_files: - - appservice.yaml -``` - -* `dendrite`: - -``` -app_service_api: - internal_api: - # ... - database: - # ... - config_files: [appservice.yaml] -``` - -A path can optionally be passed as the first argument to `main.py`. This path will be used as the base directory for the database and log file. - -Eg. Running `python3 main.py /path/to/my/dir` will store the database and logs in `/path/to/my/dir`. -`$PWD` is used by default if no path is specified. - -After setting up the bridge, send a direct message to `@appservice-discord:domain.tld` containing the channel ID to be bridged (`!bridge 123456`). - -This bridge is written with: - -* `bottle`: Receiving events from the homeserver. -* `urllib3`: Sending requests, thread safety. -* `websockets`: Connecting to Discord. (Big thanks to an anonymous person "nesslersreagent" for figuring out the initial connection mess.) - -## NOTES - -* A basic sqlite database is used for keeping track of bridged rooms. - -* Discord users can be tagged only by mentioning the dummy Matrix user, which requires the client to send a formatted body containing HTML. Partial mentions are not used to avoid unreliable queries to the websocket. - -* Logs are saved to the `appservice.log` file in `$PWD` or the specified directory. - -* For avatars to show up on Discord, you must have a [reverse proxy](https://github.com/matrix-org/dendrite/blob/master/docs/nginx/monolith-sample.conf) set up on your homeserver as the bridge does not specify the homeserver port when passing the avatar url. - -* It is not possible to add "normal" Discord bot functionality like commands as this bridge does not use `discord.py`. - -* [Privileged Intents](https://discordpy.readthedocs.io/en/latest/intents.html#privileged-intents) for members and presence must be enabled for your Discord bot. - -* This Appservice might not work well for bridging a large number of rooms since it is mostly synchronous. However, it wouldn't take much effort to port it to `asyncio` and `aiohttp` if desired. diff --git a/appservice/requirements.txt b/appservice/requirements.txt deleted file mode 100644 index 0a8c686..0000000 --- a/appservice/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -bottle -markdown -urllib3 -websockets diff --git a/bridge/README.md b/bridge/README.md deleted file mode 100644 index f6fe32c..0000000 --- a/bridge/README.md +++ /dev/null @@ -1,31 +0,0 @@ -## Installation - -`pip install -r requirements.txt` - -## Usage - -* Run `bridge.py` to generate `config.json` - -* Edit `config.json`: - -``` -{ - "homeserver": "https://matrix.org", - "username": "@name:matrix.org", - "password": "my-secret-password", # Matrix password. - "token": "my-secret-token", # Discord bot token. - "discord_cmd_prefix": "my-command-prefix", - "bridge": { - "channel_id": "room_id", - "channel_id2": "room_id2", # Bridge multiple rooms. - }, -} -``` - -This bridge does not use databases for keeping track of bridged rooms to avoid a dependency on persistent storage. This makes it easy to host on something like Heroku with the free tier. - -* Logs are saved to the `bridge.log` file in `$PWD`. - -* Normal Discord bot functionality like commands can be added to the bot via [cogs](https://discordpy.readthedocs.io/en/latest/ext/commands/cogs.html), example [here](https://gist.github.com/EvieePy/d78c061a4798ae81be9825468fe146be). - -**NOTE:** [Privileged Intents](https://discordpy.readthedocs.io/en/latest/intents.html#privileged-intents) must be enabled for your Discord bot. diff --git a/bridge/bridge.py b/bridge/bridge.py deleted file mode 100644 index 2b3c00b..0000000 --- a/bridge/bridge.py +++ /dev/null @@ -1,602 +0,0 @@ -import asyncio -import json -import logging -import os -import re -import sys -import uuid - -import aiofiles -import aiofiles.os -import aiohttp -import discord -import discord.ext.commands -import nio - - -def config_gen(config_file): - config_dict = { - "homeserver": "https://matrix.org", - "username": "@name:matrix.org", - "password": "my-secret-password", - "token": "my-secret-token", - "discord_cmd_prefix": "my-command-prefix", - "bridge": {"channel_id": "room_id"}, - } - - if not os.path.exists(config_file): - with open(config_file, "w") as f: - json.dump(config_dict, f, indent=4) - print(f"Example configuration dumped to {config_file}") - sys.exit() - - with open(config_file, "r") as f: - config = json.loads(f.read()) - - return config - - -config = config_gen("config.json") -message_store = {} - - -class MatrixClient(nio.AsyncClient): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - self.logger = logging.getLogger("matrix_logger") - - self.listen = False - self.uploaded_emotes = {} - self.ready = asyncio.Event() - self.loop = asyncio.get_event_loop() - - self.start_discord() - self.add_callbacks() - - def start_discord(self): - # Intents to fetch members from guild. - intents = discord.Intents.all() - intents.members = True - - self.discord_client = DiscordClient( - self, - allowed_mentions=discord.AllowedMentions( - everyone=False, roles=False - ), - command_prefix=config["discord_cmd_prefix"], - intents=intents, - ) - - self.bg_task = self.loop.create_task( - self.discord_client.start(config["token"]) - ) - - def add_callbacks(self): - callbacks = Callbacks(self.discord_client, self) - - self.add_event_callback( - callbacks.message_callback, - (nio.RoomMessageText, nio.RoomMessageMedia, nio.RoomMessageEmote), - ) - - self.add_event_callback( - callbacks.redaction_callback, nio.RedactionEvent - ) - - self.add_ephemeral_callback( - callbacks.typing_callback, nio.EphemeralEvent - ) - - async def upload_emote(self, emote_id): - if emote_id in self.uploaded_emotes.keys(): - return self.uploaded_emotes[emote_id] - - emote_url = f"https://cdn.discordapp.com/emojis/{emote_id}" - - emote_file = f"/tmp/{str(uuid.uuid4())}" - - async with aiohttp.ClientSession() as session: - async with session.get(emote_url) as resp: - emote = await resp.read() - content_type = resp.content_type - - async with aiofiles.open(emote_file, "wb") as f: - await f.write(emote) - - async with aiofiles.open(emote_file, "rb") as f: - resp, maybe_keys = await self.upload(f, content_type=content_type) - - await aiofiles.os.remove(emote_file) - - if type(resp) != nio.UploadResponse: - self.logger.warning(f"Failed to upload emote {emote_id}") - return - - self.uploaded_emotes[emote_id] = resp.content_uri - - return resp.content_uri - - async def get_fmt_body(self, body, emotes): - replace_ = [ - # Bold. - ("**", "", ""), - # Code blocks. - ("```", "
", "
"), - # Spoilers. - ("||", "", ""), - # Strikethrough. - ("~~", "", ""), - ] - - for replace in replace_: - for i in range(1, body.count(replace[0]) + 1): - if i % 2: - body = body.replace(replace[0], replace[1], 1) - else: - body = body.replace(replace[0], replace[2], 1) - - for emote in emotes.keys(): - emote_ = await self.upload_emote(emotes[emote]) - if emote_: - emote = f":{emote}:" - body = body.replace( - emote, - f"""\"{emote}\"""", - ) - - return body - - async def message_send( - self, message, channel_id, emotes, reply_id=None, edit_id=None - ): - room_id = config["bridge"][str(channel_id)] - - content = { - "body": message, - "format": "org.matrix.custom.html", - "formatted_body": await self.get_fmt_body(message, emotes), - "msgtype": "m.text", - } - - if reply_id: - reply_event = await self.room_get_event(room_id, reply_id) - reply_event = reply_event.event - - content = { - **content, - "m.relates_to": {"m.in_reply_to": {"event_id": reply_id}}, - "formatted_body": f"""
\ -In reply to\ -{reply_event.sender}\ -
{reply_event.body}
{content["formatted_body"]}""", - } - - if edit_id: - content = { - **content, - "body": f" * {content['body']}", - "formatted_body": f" * {content['formatted_body']}", - "m.relates_to": {"event_id": edit_id, "rel_type": "m.replace"}, - "m.new_content": {**content}, - } - - message = await self.room_send( - room_id=room_id, message_type="m.room.message", content=content - ) - - return message.event_id - - async def message_redact(self, message, channel_id): - await self.room_redact( - room_id=config["bridge"][str(channel_id)], event_id=message - ) - - async def webhook_send( - self, author, avatar, message, event_id, channel_id, embed=None - ): - channel = self.discord_client.channel_store[channel_id] - - hook_name = "matrix_bridge" - - hook = self.discord_client.webhook_cache.get(str(channel.id)) - - if not hook: - hooks = await channel.webhooks() - hook = discord.utils.get(hooks, name=hook_name) - - if not hook: - hook = await channel.create_webhook(name=hook_name) - - self.discord_client.webhook_cache[str(channel.id)] = hook - - # Username must be between 1 and 80 characters in length, - # 'wait=True' allows us to store the sent message. - try: - hook = await hook.send( - username=author[:80], - avatar_url=avatar, - content=message, - embed=embed, - wait=True, - ) - - message_store[event_id] = hook - message_store[hook.id] = event_id - except discord.errors.HTTPException as e: - self.logger.warning(f"Failed to send message {event_id}: {e}") - - -class DiscordClient(discord.ext.commands.Bot): - def __init__(self, matrix_client, *args, **kwargs): - super().__init__(*args, **kwargs) - - self.channel_store = {} - - self.webhook_cache = {} - - self.ready = asyncio.Event() - - self.add_cogs() - - self.matrix_client = matrix_client - - def add_cogs(self): - cogs_dir = "./cogs" - - if not os.path.isdir(cogs_dir): - return - - for cog in os.listdir(cogs_dir): - if cog.endswith(".py"): - cog = f"cogs.{cog[:-3]}" - self.load_extension(cog) - - async def to_return(self, channel_id, message=None): - await self.matrix_client.ready.wait() - - return str(channel_id) not in config["bridge"].keys() or ( - message - and message.webhook_id - in [hook.id for hook in self.webhook_cache.values()] - ) - - async def on_ready(self): - for channel in config["bridge"].keys(): - channel_ = self.get_channel(int(channel)) - if not channel_: - self.matrix_client.logger.warning(f"Failed to get channel for ID {channel}") - continue - self.channel_store[channel] = channel_ - - self.ready.set() - - async def on_message(self, message): - # Process other stuff like cogs before ignoring the message. - await self.process_commands(message) - - if await self.to_return(message.channel.id, message): - return - - content = await self.process_message(message) - - matrix_message = await self.matrix_client.message_send( - content[0], - message.channel.id, - reply_id=content[1], - emotes=content[2], - ) - - message_store[message.id] = matrix_message - - async def on_message_edit(self, before, after): - if await self.to_return(after.channel.id, after): - return - - content = await self.process_message(after) - - # Edit message only if it can be looked up in the cache. - if before.id in message_store: - await self.matrix_client.message_send( - content[0], - after.channel.id, - edit_id=message_store[before.id], - emotes=content[2], - ) - - async def on_message_delete(self, message): - # Delete message only if it can be looked up in the cache. - if message.id in message_store: - await self.matrix_client.message_redact( - message_store[message.id], message.channel.id - ) - - async def on_typing(self, channel, user, when): - if await self.to_return(channel.id) or user == self.user: - return - - # Send typing event - await self.matrix_client.room_typing( - config["bridge"][str(channel.id)], timeout=0 - ) - - async def process_message(self, message): - content = message.clean_content - - regex = r"" - emotes = {} - - # Store all emotes in a dict to upload and insert into formatted body. - # { "emote_name": "emote_id" } - for emote in re.findall(regex, content): - emotes[emote[0]] = emote[1] - - # Get message reference for replies. - replied_event = None - if message.reference: - replied_message = await message.channel.fetch_message( - message.reference.message_id - ) - # Try to get the corresponding event from the message cache. - try: - replied_event = message_store[replied_message.id] - except KeyError: - pass - - # Replace emote IDs with names. - content = re.sub(regex, r":\g<1>:", content) - - # Append attachments to message. - for attachment in message.attachments: - content += f"\n{attachment.url}" - - content = f"[{message.author.display_name}] {content}" - - return content, replied_event, emotes - - -class Callbacks(object): - def __init__(self, discord_client, matrix_client): - self.discord_client = discord_client - self.matrix_client = matrix_client - - def get_channel(self, room): - channel_id = next( - ( - channel_id - for channel_id, room_id in config["bridge"].items() - if room_id == room.room_id - ), - None, - ) - - return channel_id - - async def to_return(self, room, event): - await self.matrix_client.discord_client.ready.wait() - - return ( - room.room_id not in config["bridge"].values() - or event.sender == self.matrix_client.user - or not self.matrix_client.listen - ) - - async def message_callback(self, room, event): - message = event.body - - # Ignore messages having an empty body. - if await self.to_return(room, event) or not message: - return - - content_dict = event.source.get("content") - - # Get the corresponding Discord channel. - channel_id = self.get_channel(room) - - if not channel_id: - return - - author = room.user_name(event.sender) - avatar = None - - homeserver = event.sender.split(":")[-1] - url = "https://matrix.org/_matrix/media/r0/download" - - try: - if content_dict["m.relates_to"]["rel_type"] == "m.replace": - # Get the original message's event ID. - edited_event = content_dict["m.relates_to"]["event_id"] - edited_content = await self.process_message( - content_dict["m.new_content"]["body"], channel_id - ) - - # Get the corresponding Discord message. - webhook_message = message_store[edited_event] - - try: - await webhook_message.edit(content=edited_content) - # Handle exception if edited message was deleted on Discord. - except ( - discord.errors.NotFound, - discord.errors.HTTPException, - ) as e: - self.matrix_client.logger.warning( - f"Failed to edit message {edited_event}: {e}" - ) - - return - except KeyError: - pass - - try: - if ( - content_dict["m.relates_to"]["m.in_reply_to"]["event_id"] - in message_store.values() - ): - # Remove the first occurence of our bot's username if replying. - # > <@discordbridge:something.org> [discord user] - message = message.replace(f"<{config['username']}>", "", 1) - except KeyError: - pass - - # _testuser waves_ (Italics) - if content_dict["msgtype"] == "m.emote": - message = f"_{author} {message}_" - - message = await self.process_message(message, channel_id) - - embed = None - - # Get attachments. - try: - attachment = event.url.split("/")[-1] - # TODO: Fix URL for attachments forwarded from other rooms. - attachment = f"{url}/{homeserver}/{attachment}" - - embed = discord.Embed(colour=discord.Colour.blue(), title=message) - embed.set_image(url=attachment) - - # Send attachment URL in message along with embed, - # Just in-case the attachment is not an image. - message = attachment - except AttributeError: - pass - - # Get avatar. - for user in room.users.values(): - if user.user_id == event.sender: - if user.avatar_url: - avatar = user.avatar_url.split("/")[-1] - avatar = f"{url}/{homeserver}/{avatar}" - break - - await self.matrix_client.webhook_send( - author, avatar, message, event.event_id, channel_id, embed=embed - ) - - async def redaction_callback(self, room, event): - if await self.to_return(room, event): - return - - # Try to fetch the message from cache. - try: - message = message_store[event.redacts] - await message.delete() - # Handle exception if message was already deleted on Discord. - except discord.errors.NotFound as e: - self.matrix_client.logger.warning( - f"Failed to delete message {event.event_id}: {e}" - ) - except KeyError: - pass - - async def typing_callback(self, room, event): - if ( - not room.typing_users - or ( - len(room.typing_users) == 1 - and self.matrix_client.user in room.typing_users - ) - or room.room_id not in config["bridge"].values() - ): - return - - # Get the corresponding Discord channel. - channel_id = self.get_channel(room) - - if not channel_id: - return - - # Send typing event. - async with self.discord_client.channel_store[channel_id].typing(): - return - - async def process_message(self, message, channel_id): - emotes = re.findall(r":(\w*):", message) - mentions = re.findall(r"(@(\w*))", message) - - # Get the guild from channel ID. - guild = self.discord_client.channel_store[channel_id].guild - - added_emotes = [] - for emote in emotes: - # Don't replace emote names with IDs multiple times. - # :emote: becomes <:emote:emote_id> - if emote not in added_emotes: - added_emotes.append(emote) - emote_ = discord.utils.get(guild.emojis, name=emote) - if emote_: - message = message.replace(f":{emote}:", str(emote_)) - - # mentions = [('@name', 'name'), ('@', '')] - for mention in mentions: - # Don't fetch member if mention is empty. - # Single "@" without any name. - if mention[1]: - member = await guild.query_members(query=mention[1]) - if member: - # Get first result. - message = message.replace(mention[0], member[0].mention) - - return message - - -async def main(): - logging.basicConfig( - level=logging.INFO, - format="%(asctime)s %(name)s:%(levelname)s: %(message)s", - datefmt="%Y-%m-%d %H:%M:%S", - handlers=[ - logging.FileHandler("bridge.log"), - logging.StreamHandler(), - ], - ) - - retry = 2 - - matrix_client = MatrixClient(config["homeserver"], config["username"]) - - while True: - resp = await matrix_client.login(config["password"]) - - if type(resp) == nio.LoginError: - matrix_client.logger.error(f"Failed to login: {resp}") - return False - - # Login successful. - matrix_client.logger.info(resp) - - try: - await matrix_client.sync(full_state=True) - except Exception: - matrix_client.logger.exception("Initial sync failed!") - return False - - try: - matrix_client.ready.set() - matrix_client.listen = True - - matrix_client.logger.info("Clients ready!") - - await matrix_client.sync_forever(timeout=30000, full_state=True) - except Exception: - matrix_client.logger.exception( - f"Unknown exception occured, retrying in {retry} seconds..." - ) - - # Clear "ready" status. - matrix_client.ready.clear() - - await matrix_client.close() - await asyncio.sleep(retry) - - matrix_client.listen = False - finally: - if matrix_client.listen: - await matrix_client.close() - return False - - -if __name__ == "__main__": - asyncio.run(main()) diff --git a/bridge/cogs/.keep b/bridge/cogs/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/bridge/requirements.txt b/bridge/requirements.txt deleted file mode 100644 index 16946d4..0000000 --- a/bridge/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -discord.py==2.0.1 -matrix-nio==0.19.0 diff --git a/demo.png b/demo.png deleted file mode 100644 index 5440f165b7f0ba1b7d32e43e7df1e6647aab59b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165029 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

&*A-=?H8ag^l-!G_jSYFrF6;oF3 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

jCj0 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 diff --git a/misc/migrate_emotes.py b/misc/migrate_emotes.py deleted file mode 100644 index 2f62c2d..0000000 --- a/misc/migrate_emotes.py +++ /dev/null @@ -1,160 +0,0 @@ -import asyncio -import json -import logging -import os -import sys -import uuid -import aiofiles -import aiofiles.os -import aiohttp -import discord -import nio - - -def config_gen(config_file): - config_dict = { - "homeserver": "https://matrix.org", - "username": "@name:matrix.org", - "password": "my-secret-password", - "token": "my-secret-token", - "migrate": {"guild_id": "room_id"}, - } - - if not os.path.exists(config_file): - with open(config_file, "w") as f: - json.dump(config_dict, f, indent=4) - print(f"Example configuration dumped to {config_file}") - sys.exit() - - with open(config_file, "r") as f: - config = json.loads(f.read()) - - return config - - -config = config_gen("config.json") - - -class MatrixClient(nio.AsyncClient): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - self.logger = logging.getLogger("matrix_logger") - self.uploaded_emotes = {} - - async def start(self, discord_client): - timeout = 30000 - - self.logger.info(await self.login(config["password"])) - - self.logger.info("Syncing...") - await self.sync(timeout) - - await discord_client.wait_until_ready() - await discord_client.migrate() - - async def upload_emote(self, emote): - emote_name = f":{emote.name}:" - emote_file = f"/tmp/{str(uuid.uuid4())}" - - async with aiohttp.ClientSession() as session: - async with session.get(str(emote.url)) as resp: - emote_ = await resp.read() - content_type = resp.content_type - - async with aiofiles.open(emote_file, "wb") as f: - await f.write(emote_) - - async with aiofiles.open(emote_file, "rb") as f: - resp, maybe_keys = await self.upload(f, content_type=content_type) - - await aiofiles.os.remove(emote_file) - - if type(resp) != nio.UploadResponse: - self.logger.warning(f"Failed to upload {emote_name}") - return - - self.logger.info(f"Uploaded {emote_name}") - - url = resp.content_uri - - self.uploaded_emotes[emote_name] = {} - self.uploaded_emotes[emote_name]["url"] = url - - async def send_emote_state(self, room_id, emote_dict): - event_type = "im.ponies.room_emotes" - - emotes = {} - - emotes_ = await self.room_get_state_event(room_id, event_type) - - # Get previous emotes from room - if type(emotes_) != nio.RoomGetStateEventError: - emotes = emotes_.content.get("emoticons") - - content = {"emoticons": {**emotes, **emote_dict}} - - resp = await self.room_put_state(room_id, event_type, content) - - if type(resp) == nio.RoomPutStateError: - self.logger.warning(f"Failed to send emote state: {resp}") - - -class DiscordClient(discord.Client): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - self.matrix_client = MatrixClient( - config["homeserver"], config["username"] - ) - - self.bg_task = self.loop.create_task( - self.log_exceptions(self.matrix_client) - ) - - self.logger = logging.getLogger("discord_logger") - - async def log_exceptions(self, matrix_client): - try: - return await matrix_client.start(self) - except Exception as e: - matrix_client.logger.warning(f"Unknown exception occurred: {e}") - - await matrix_client.close() - - async def migrate(self): - for guild in config["migrate"].keys(): - emote_guild = self.get_guild(int(guild)) - emote_room = config["migrate"][guild] - - if emote_guild: - self.logger.info( - f"Guild: {emote_guild.name} Room: {emote_room}" - ) - - await asyncio.gather( - *map(self.matrix_client.upload_emote, emote_guild.emojis) - ) - - self.logger.info("Sending state event to room...") - - await self.matrix_client.send_emote_state( - emote_room, self.matrix_client.uploaded_emotes - ) - - self.logger.info("Finished uploading emotes") - - await self.matrix_client.logout() - await self.matrix_client.close() - - await self.close() - - -def main(): - logging.basicConfig(level=logging.INFO) - - DiscordClient().run(config["token"]) - - -if __name__ == "__main__": - main() diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..be79a97 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,30 @@ +[build-system] +requires = ["setuptools", "setuptools-scm"] +build-backend = "setuptools.build_meta" + +[project] +name = "aioappsrv" +authors = [ + {name = "alemi", email = "me@alemi.dev"}, + {name = "git-bruh", email = ""}, +] +description = "simple and asynchronous matrix appservice framework" +readme = "README.md" +requires-python = ">=3.7" +keywords = ["matrix", "appservice", "bot", "bridge"] +dynamic = ["version"] +license = {file = "LICENSE"} +classifiers = [ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", +] +dependencies = [ + "bottle", + "markdown", + "urllib3", + "websockets", +] + +[tool.setuptools_scm] +write_to = "src/aioappsrv/__version__.py" diff --git a/appservice/appservice.py b/src/aioappsrv/appservice.py similarity index 100% rename from appservice/appservice.py rename to src/aioappsrv/appservice.py diff --git a/appservice/cache.py b/src/aioappsrv/cache.py similarity index 100% rename from appservice/cache.py rename to src/aioappsrv/cache.py diff --git a/appservice/db.py b/src/aioappsrv/db.py similarity index 100% rename from appservice/db.py rename to src/aioappsrv/db.py diff --git a/appservice/discord.py b/src/aioappsrv/discord.py similarity index 100% rename from appservice/discord.py rename to src/aioappsrv/discord.py diff --git a/appservice/errors.py b/src/aioappsrv/errors.py similarity index 100% rename from appservice/errors.py rename to src/aioappsrv/errors.py diff --git a/appservice/gateway.py b/src/aioappsrv/gateway.py similarity index 100% rename from appservice/gateway.py rename to src/aioappsrv/gateway.py diff --git a/appservice/main.py b/src/aioappsrv/main.py similarity index 100% rename from appservice/main.py rename to src/aioappsrv/main.py diff --git a/appservice/matrix.py b/src/aioappsrv/matrix.py similarity index 100% rename from appservice/matrix.py rename to src/aioappsrv/matrix.py diff --git a/appservice/misc.py b/src/aioappsrv/misc.py similarity index 100% rename from appservice/misc.py rename to src/aioappsrv/misc.py