From 5d0e338319eb99a0338d32f57dd850a2543a70f1 Mon Sep 17 00:00:00 2001 From: Jean-Marie Mineau Date: Sun, 6 Mar 2022 16:16:22 +0100 Subject: [PATCH] move from maiin repo --- README.md | 32 +++++++++ TODO.md | 7 ++ handlers/main.yml | 10 +++ tasks/main.yml | 104 ++++++++++++++++++++++++++++ templates/bridge_discord.service | 15 ++++ templates/config.yaml | 114 +++++++++++++++++++++++++++++++ 6 files changed, 282 insertions(+) create mode 100644 README.md create mode 100644 TODO.md create mode 100644 handlers/main.yml create mode 100644 tasks/main.yml create mode 100644 templates/bridge_discord.service create mode 100644 templates/config.yaml diff --git a/README.md b/README.md new file mode 100644 index 0000000..9fbd6cd --- /dev/null +++ b/README.md @@ -0,0 +1,32 @@ +# Matrix Discord Bridge + +Install the matrix bridge for discord: https://github.com/Half-Shot/matrix-appservice-discord + +This role is part of my ansible roles. It is made to interact with other roles that are listed here, and require some variables. + +## Role required: + +- postgre (TODO: ADD LINK HERE) + +## Variable required: + +``` +ansible_managed: str, msg indicating a file managed by ansible +matrix_server_name: the matrix server name +matrix_bridge_discord_client_ID: Value for id the client to the server (see https://github.com/Half-Shot/matrix-appservice-discord for generation) +matrix_bridge_discord_botToken: **SECRET** value for auth the client to the server (see https://github.com/Half-Shot/matrix-appservice-discord for generation) +matrix_bridge_discord_postgre_user_pwd: **SECRET** pwd for connecting to the postgre db +``` + +## Add role to you ansible playbook: + +To add this role to your project, you can use git submodules: + +``` +git submodule add ssh://git@gitea.auro.re:2222/Pains-Perdus/matrix-bridge-discord.git roles/matrix-bridge-discord +git submodule init +``` + +## Copyright + +Copyright 2021 Jean-Marie Mineau diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..02231a7 --- /dev/null +++ b/TODO.md @@ -0,0 +1,7 @@ +# TODO + +- Move the location from /srv to /opt +- STOP RUNNING AS ROOT! +- Setup prometheus somehow (maybe not in the role) +- Add link to postgres role +- Move registration files to a registration folder diff --git a/handlers/main.yml b/handlers/main.yml new file mode 100644 index 0000000..8af9f7c --- /dev/null +++ b/handlers/main.yml @@ -0,0 +1,10 @@ +--- +- name: Re-build discord bridge + shell: + cmd: npm run build + chdir: /srv/matrix-appservice-discord + +- name: Restart the discord bridge + systemd: + name: bridge_discord + state: restarted diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 0000000..7971d1f --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,104 @@ +--- + +- name: Setup postgres + include_role: + name: postgre + vars: + postgres_users: + - name: bridge_discor_user + password: "{{ matrix_bridge_discord_postgre_user_pwd }}" + databases: + - name: bridge_discord + owner: bridge_discor_user + local: C + template: template0 + no_log: true + +- name: Install dependencies + apt: + name: + - npm + - git + - pgloader + state: latest + update_cache: true + register: apt_result + retries: 3 + until: apt_result is succeeded + +- name: Ensure the /srv folder exist + file: + path: /srv + state: directory + group: root + owner: root + mode: u=rwx,g=rx,o=rx + +- name: Dowload the sources of the bot + git: + repo: 'https://github.com/Half-Shot/matrix-appservice-discord.git' + dest: /srv/matrix-appservice-discord + update: no # because this module is stupid and cannot ignore local changes +# notify: Re-build discord bridge + +- name: Install dependencies + npm: + path: /srv/matrix-appservice-discord + state: latest + executable: /usr/bin/npm --force + retries: 3 + delay: 1 + register: npm_install_result + until: npm_install_result is succeeded + # The dependencies are screwed up... + +- name: Build typescript + shell: + cmd: npm run build + chdir: /srv/matrix-appservice-discord + creates: /srv/matrix-appservice-discord/build + notify: Restart the discord bridge + +- name: Configure the bridge + template: + src: config.yaml + dest: /srv/matrix-appservice-discord/config.yaml + owner: root + group: root + mode: '0660' + notify: Restart the discord bridge + no_log: true + +- name: Generate discord-registration.yaml + shell: + cmd: "node build/src/discordas.js -r -u 'http://localhost:9005' -c config.yaml" + chdir: /srv/matrix-appservice-discord + creates: /srv/matrix-appservice-discord/discord-registration.yaml + notify: Restart synapse + no_log: true + +- name: Copy config for synapse + file: + src: /srv/matrix-appservice-discord/discord-registration.yaml + dest: /etc/matrix-synapse/discord-registration.yaml + state: link + +- name: Copy the daemon configuration + template: + src: bridge_discord.service + dest: /etc/systemd/system/bridge_discord.service + notify: Restart the discord bridge + +- name: Ensure the log directory exists + file: + path: /var/log/bridge_discord + state: directory + group: root + owner: root + mode: u=rwx,g=rx,o= + +- name: Enable the daemon + systemd: + name: bridge_discord + state: started + enabled: yes diff --git a/templates/bridge_discord.service b/templates/bridge_discord.service new file mode 100644 index 0000000..867eef4 --- /dev/null +++ b/templates/bridge_discord.service @@ -0,0 +1,15 @@ +{{ ansible_managed | comment }} + +[Unit] +Description = Discord Bridge + +[Service] +Environment=NODE_PORT=3000 +Type=simple +User=root +Restart=on-failure +WorkingDirectory=/srv/matrix-appservice-discord +ExecStart=npm start + +[Install] +WantedBy=multi-user.target diff --git a/templates/config.yaml b/templates/config.yaml new file mode 100644 index 0000000..5c5d2eb --- /dev/null +++ b/templates/config.yaml @@ -0,0 +1,114 @@ +{{ ansible_managed | comment }} + +bridge: + # Domain part of the bridge, e.g. matrix.org + domain: "{{ matrix_server_name }}" + # This should be your publicly-facing URL because Discord may use it to + # fetch media from the media store. + homeserverUrl: "https://{{ matrix_server_name }}" + # The TCP port on which the appservice runs on. + port: 9005 + # Interval at which to process users in the 'presence queue'. If you have + # 5 users, one user will be processed every 500 milliseconds according to the + # value below. This has a minimum value of 250. + # WARNING: This has a high chance of spamming the homeserver with presence + # updates since it will send one each time somebody changes state or is online. + presenceInterval: 500 + # Disable setting presence for 'ghost users' which means Discord users on Matrix + # will not be shown as away or online. + disablePresence: false + # Disable sending typing notifications when somebody on Discord types. + disableTypingNotifications: false + # Disable deleting messages on Discord if a message is redacted on Matrix. + disableDeletionForwarding: false + # Disable portal bridging, where Matrix users can search for unbridged Discord + # rooms on their Matrix server. + disablePortalBridging: false + # Enable users to bridge rooms using !discord commands. See + # https://t2bot.io/discord for instructions. + enableSelfServiceBridging: false + # Disable sending of read receipts for Matrix events which have been + # successfully bridged to Discord. + disableReadReceipts: false + # Disable Join Leave echos from matrix + disableJoinLeaveNotifications: true + # Disable Invite echos from matrix + disableInviteNotifications: true + # Auto-determine the language of code blocks (this can be CPU-intensive) + determineCodeLanguage: false +# Authentication configuration for the discord bot. +auth: + # This MUST be a string (wrapped in quotes) + clientID: "{{ matrix_bridge_discord_client_ID }}" + botToken: "{{ matrix_bridge_discord_botToken }}" + # You must enable "Privileged Gateway Intents" in your bot settings on discord.com (e.g. https://discord.com/developers/applications/12345/bot) + # for this to work + usePrivilegedIntents: true +logging: + # What level should the logger output to the console at. + console: "warn" #silly, verbose, info, http, warn, error, silent + lineDateFormat: "MMM-D HH:mm:ss.SSS" # This is in moment.js format + files: + - file: "/var/log/bridge_discord/debug.log" + disable: + - "PresenceHandler" # Will not capture presence logging + - file: "/var/log/bridge_discord/warn.log" # Will capture warnings + level: "warn" + - file: "/var/log/bridge_discord/botlogs.log" # Will capture logs from DiscordBot + level: "info" + enable: + - "DiscordBot" +database: + # You may either use SQLite or Postgresql for the bridge database, which contains + # important mappings for events and user puppeting configurations. + # Use the filename option for SQLite, or connString for Postgresql. + # If you are migrating, see https://github.com/Half-Shot/matrix-appservice-discord/blob/master/docs/howto.md#migrate-to-postgres-from-sqlite + # WARNING: You will almost certainly be fine with sqlite unless your bridge + # is in heavy demand and you suffer from IO slowness. + # filename: "discord.db" + connString: "postgresql://bridge_discor_user:{{ matrix_bridge_discord_postgre_user_pwd }}@localhost/bridge_discord" +room: + # Set the default visibility of alias rooms, defaults to "public". + # One of: "public", "private" + defaultVisibility: "private" +channel: + # Pattern of the name given to bridged rooms. + # Can use :guild for the guild name and :name for the channel name. + namePattern: "[Discord] :guild :name" + # Changes made to rooms when a channel is deleted. + deleteOptions: + # Prefix the room name with a string. + #namePrefix: "[Deleted]" + # Prefix the room topic with a string. + #topicPrefix: "This room has been deleted" + # Disable people from talking in the room by raising the event PL to 50 + disableMessaging: false + # Remove the discord alias from the room. + unsetRoomAlias: true + # Remove the room from the directory. + unlistFromDirectory: true + # Set the room to be unavailable for joining without an invite. + setInviteOnly: true + # Make all the discord users leave the room. + ghostsLeave: true +limits: + # Delay in milliseconds between discord users joining a room. + roomGhostJoinDelay: 6000 + # Lock timeout in milliseconds before sending messages to discord to avoid + # echos. Default is rather high as the lock will most likely time out + # before anyways. + # echos = (Copies of a sent message may arrive from discord before we've + # fininished handling it, causing us to echo it back to the room) + discordSendDelay: 1500 + # Set a maximum of rooms to be bridged. + # roomCount: 20 +ghosts: + # Pattern for the ghosts nick, available is :nick, :username, :tag and :id + nickPattern: ":nick" + # Pattern for the ghosts username, available is :username, :tag and :id + usernamePattern: ":username#:tag" +# Prometheus-compatible metrics endpoint +metrics: + enable: false + port: 9001 + host: "127.0.0.1"