| @@ -0,0 +1,131 @@ | |||
| # matrix-appservice-discord is a Matrix <-> Discord bridge | |||
| # See: https://github.com/Half-Shot/matrix-appservice-discord | |||
| matrix_appservice_discord_enabled: true | |||
| matrix_appservice_discord_docker_image: "halfshot/matrix-appservice-discord:latest" | |||
| matrix_appservice_discord_base_path: "{{ matrix_base_data_path }}/appservice-discord" | |||
| # Get your own keys at https://discordapp.com/developers/applications/me/create | |||
| matrix_appservice_discord_client_id: '' | |||
| matrix_appservice_discord_bot_token: '' | |||
| # Controls whether the Appservice Discord container exposes the Client/Server API port (tcp/9005). | |||
| matrix_appservice_discord_container_expose_client_server_api_port: false | |||
| # A list of extra arguments to pass to the container | |||
| matrix_appservice_discord_container_extra_arguments: [] | |||
| # List of systemd services that matrix-appservice-discord.service depends on. | |||
| matrix_appservice_discord_systemd_required_services_list: ['docker.service'] | |||
| # List of systemd services that matrix-appservice-discord.service wants | |||
| matrix_appservice_discord_systemd_wanted_services_list: [] | |||
| matrix_appservice_discord_configuration_yaml: | | |||
| bridge: | |||
| domain: "{{ matrix_domain }}" | |||
| homeserverUrl: "{{ matrix_homeserver_url }}" | |||
| auth: | |||
| clientID: "{{matrix_appservice_discord_client_id}}" | |||
| botToken: "{{matrix_appservice_discord_bot_token}}" | |||
| database: | |||
| filename: "/data/discord.db" | |||
| userStorePath: "/data/user-store.db" | |||
| roomStorePath: "/data/room-store.db" | |||
| matrix_appservice_discord_configuration_extension_yaml: | | |||
| # This is a sample of the config file showing all avaliable options. | |||
| # Where possible we have documented what they do, and all values are the | |||
| # default values. | |||
| # | |||
| #bridge: | |||
| # # Domain part of the bridge, e.g. matrix.org | |||
| # domain: "localhost" | |||
| # # This should be your publically facing URL because Discord may use it to | |||
| # # fetch media from the media store. | |||
| # homeserverUrl: "http://localhost:8008" | |||
| # # 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 | |||
| # # 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 | |||
| # Authentication configuration for the discord bot. | |||
| #auth: | |||
| # clientID: "12345" | |||
| # botToken: "foobar" | |||
| #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: "debug.log" | |||
| # disable: | |||
| # - "PresenceHandler" # Will not capture presence logging | |||
| # - file: "warn.log" # Will capture warnings | |||
| # level: "warn" | |||
| # - file: "botlogs.log" # Will capture logs from DiscordBot | |||
| # level: "info" | |||
| # enable: | |||
| # - "DiscordBot" | |||
| #database: | |||
| # userStorePath: "user-store.db" | |||
| # roomStorePath: "room-store.db" | |||
| # # 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://user:password@localhost/database_name" | |||
| #room: | |||
| # # Set the default visibility of alias rooms, defaults to "public". | |||
| # # One of: "public", "private" | |||
| # defaultVisibility: "public" | |||
| #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 unavaliable 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 | |||
| # # Delay in milliseconds before sending messages to discord to avoid 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: 750 | |||
| matrix_appservice_discord_configuration_extension: "{{ matrix_appservice_discord_configuration_extension_yaml|from_yaml if matrix_appservice_discord_configuration_extension_yaml|from_yaml else {} }}" | |||
| matrix_appservice_discord_configuration: "{{ matrix_appservice_discord_configuration_yaml|from_yaml|combine(matrix_appservice_discord_configuration_extension, recursive=True) }}" | |||
| @@ -0,0 +1,21 @@ | |||
| - import_tasks: "{{ role_path }}/tasks/init.yml" | |||
| tags: | |||
| - always | |||
| - import_tasks: "{{ role_path }}/tasks/validate_config.yml" | |||
| when: "run_setup and matrix_appservice_discord_enabled" | |||
| tags: | |||
| - setup-all | |||
| - setup-appservice-discord | |||
| - import_tasks: "{{ role_path }}/tasks/setup-install.yml" | |||
| when: "run_setup and matrix_appservice_discord_enabled" | |||
| tags: | |||
| - setup-all | |||
| - setup-appservice-discord | |||
| - import_tasks: "{{ role_path }}/tasks/setup-uninstall.yml" | |||
| when: "run_setup and not matrix_appservice_discord_enabled" | |||
| tags: | |||
| - setup-all | |||
| - setup-appservice-discord | |||
| @@ -1,17 +1,24 @@ | |||
| --- | |||
| # If the matrix-synapse role is not used, `matrix_synapse_role_executed` won't exist. | |||
| # We don't want to fail in such cases. | |||
| - name: Fail if matrix-synapse role already executed | |||
| fail: | |||
| msg: >- | |||
| The matrix-bridge-appservice-discord role needs to execute before the matrix-synapse role. | |||
| when: "matrix_synapse_role_executed|default(False)" | |||
| - name: Ensure Appservice Discord image is pulled | |||
| docker_image: | |||
| name: "{{ matrix_appservice_discord_docker_image }}" | |||
| when: "matrix_appservice_discord_enabled" | |||
| - name: Ensure Appservice Discord configuration path exists | |||
| - name: Ensure Appservice Discord base directory exists | |||
| file: | |||
| path: "{{ matrix_appservice_discord_base_path }}" | |||
| state: directory | |||
| mode: 0750 | |||
| owner: "{{ matrix_user_username }}" | |||
| group: "{{ matrix_user_username }}" | |||
| when: "matrix_appservice_discord_enabled" | |||
| - name: Ensure Matrix Appservice Discord config installed | |||
| copy: | |||
| @@ -20,26 +27,23 @@ | |||
| mode: 0644 | |||
| owner: "{{ matrix_user_username }}" | |||
| group: "{{ matrix_user_username }}" | |||
| when: "matrix_appservice_discord_enabled" | |||
| - name: Ensure matrix-appservice-discord.service installed | |||
| template: | |||
| src: "{{ role_path }}/templates/ext/appservice-discord/systemd/matrix-appservice-discord.service.j2" | |||
| src: "{{ role_path }}/templates/systemd/matrix-appservice-discord.service.j2" | |||
| dest: "/etc/systemd/system/matrix-appservice-discord.service" | |||
| mode: 0644 | |||
| register: matrix_appservice_discord_systemd_service_result | |||
| when: "matrix_appservice_discord_enabled" | |||
| - name: Ensure systemd reloaded after matrix-appservice-discord.service installation | |||
| service: | |||
| daemon_reload: yes | |||
| when: "matrix_appservice_discord_enabled and matrix_appservice_discord_systemd_service_result.changed" | |||
| when: "matrix_appservice_discord_systemd_service_result.changed" | |||
| - name: Check if a matrix-appservice-discord registration file exists | |||
| stat: | |||
| path: "{{ matrix_appservice_discord_base_path }}/discord-registration.yaml" | |||
| register: appservice_discord_registration_file | |||
| when: "matrix_appservice_discord_enabled" | |||
| - name: Generate matrix-appservice-discord discord-registration.yaml if it doesn't exist | |||
| shell: >- | |||
| @@ -54,17 +58,15 @@ | |||
| -c /data/config.yaml | |||
| -f /data/discord-registration.yaml | |||
| -l discord_bot | |||
| when: "matrix_appservice_discord_enabled and not appservice_discord_registration_file.stat.exists" | |||
| when: "not appservice_discord_registration_file.stat.exists" | |||
| - set_fact: | |||
| matrix_synapse_app_service_config_file_appservice_discord: '{{ matrix_appservice_discord_base_path }}/discord-registration.yml' | |||
| when: "matrix_appservice_discord_enabled" | |||
| - name: Check if a matrix-appservice-discord invite_link file exists | |||
| stat: | |||
| path: "{{ matrix_appservice_discord_base_path }}/invite_link" | |||
| register: appservice_discord_link_generated | |||
| when: "matrix_appservice_discord_enabled" | |||
| - name: Generate your discord invite link | |||
| shell: >- | |||
| @@ -75,28 +77,17 @@ | |||
| -w /data | |||
| {{ matrix_appservice_discord_docker_image }} | |||
| /bin/sh -c "node .././build/tools/addbot.js > invite_link" | |||
| when: "matrix_appservice_discord_enabled and not appservice_discord_link_generated.stat.exists" | |||
| when: "not appservice_discord_link_generated.stat.exists" | |||
| # If the matrix-synapse role is not used, these variables may not exist. | |||
| - set_fact: | |||
| matrix_synapse_container_additional_volumes: > | |||
| {{ matrix_synapse_container_additional_volumes }} | |||
| {{ matrix_synapse_container_additional_volumes|default([]) }} | |||
| + | |||
| {{ [{'src': '{{ matrix_appservice_discord_base_path }}/discord-registration.yaml', 'dst': '{{ matrix_synapse_app_service_config_file_appservice_discord }}', 'options': 'ro'}] }} | |||
| when: "matrix_appservice_discord_enabled" | |||
| - set_fact: | |||
| matrix_synapse_app_service_config_files: > | |||
| {{ matrix_synapse_app_service_config_files }} | |||
| {{ matrix_synapse_app_service_config_files|default([]) }} | |||
| + | |||
| {{ ["{{ matrix_synapse_app_service_config_file_appservice_discord }}"] | to_nice_json }} | |||
| when: "matrix_appservice_discord_enabled" | |||
| # | |||
| # Tasks related to getting rid of matrix-appservice-discord (if it was previously enabled) | |||
| # | |||
| - name: Ensure matrix-appservice-discord.service doesn't exist | |||
| file: | |||
| path: "/etc/systemd/system/matrix-appservice-discord.service" | |||
| state: absent | |||
| when: "not matrix_appservice_discord_enabled" | |||
| @@ -0,0 +1,6 @@ | |||
| --- | |||
| - name: Ensure matrix-appservice-discord.service doesn't exist | |||
| file: | |||
| path: "/etc/systemd/system/matrix-appservice-discord.service" | |||
| state: absent | |||
| @@ -0,0 +1,10 @@ | |||
| --- | |||
| - name: Fail if required settings not defined | |||
| fail: | |||
| msg: >- | |||
| You need to define a required configuration setting (`{{ item }}`). | |||
| when: "vars[item] == ''" | |||
| with_items: | |||
| - "matrix_appservice_discord_client_id" | |||
| - "matrix_appservice_discord_bot_token" | |||
| @@ -1,10 +1,13 @@ | |||
| #jinja2: lstrip_blocks: "True" | |||
| [Unit] | |||
| Description=Matrix Appservice Discord server | |||
| After=docker.service | |||
| Requires=docker.service | |||
| Requires=matrix-synapse.service | |||
| After=matrix-synapse.service | |||
| {% for service in matrix_appservice_discord_systemd_required_services_list %} | |||
| Requires={{ service }} | |||
| After={{ service }} | |||
| {% endfor %} | |||
| {% for service in matrix_appservice_discord_systemd_wanted_services_list %} | |||
| Wants={{ service }} | |||
| {% endfor %} | |||
| [Service] | |||
| Type=simple | |||
| @@ -20,6 +23,9 @@ ExecStart=/usr/bin/docker run --rm --name matrix-appservice-discord \ | |||
| -p 127.0.0.1:9005:9005 \ | |||
| {% endif %} | |||
| -v {{ matrix_appservice_discord_base_path }}:/data \ | |||
| {% for arg in matrix_appservice_discord_container_extra_arguments %} | |||
| {{ arg }} \ | |||
| {% endfor %} | |||
| {{ matrix_appservice_discord_docker_image }} | |||
| ExecStop=-/usr/bin/docker kill matrix-appservice-discord | |||
| @@ -238,129 +238,6 @@ matrix_s3_media_store_region: "eu-central-1" | |||
| # Controls whether the self-check feature should validate SSL certificates. | |||
| matrix_synapse_self_check_validate_certificates: true | |||
| # Matrix Appservice Discord is a Matrix <-> Discord bridge | |||
| # Enable Discord bridge | |||
| matrix_appservice_discord_enabled: false | |||
| matrix_appservice_discord_docker_image: "halfshot/matrix-appservice-discord:latest" | |||
| matrix_appservice_discord_base_path: "{{ matrix_base_data_path }}/appservice-discord" | |||
| matrix_appservice_discord_client_id: "YOUR DISCORD APP CLIENT ID" | |||
| matrix_appservice_discord_bot_token: "YOUR DISCORD APP BOT TOKEN" | |||
| # Controls whether the Appservice Discord container exposes the Client/Server API port (tcp/9005). | |||
| matrix_appservice_discord_container_expose_client_server_api_port: false | |||
| matrix_appservice_discord_configuration_yaml: | | |||
| bridge: | |||
| domain: "{{ matrix_domain }}" | |||
| homeserverUrl: "{{ matrix_homeserver_url }}" | |||
| auth: | |||
| clientID: "{{matrix_appservice_discord_client_id}}" | |||
| botToken: "{{matrix_appservice_discord_bot_token}}" | |||
| database: | |||
| filename: "/data/discord.db" | |||
| userStorePath: "/data/user-store.db" | |||
| roomStorePath: "/data/room-store.db" | |||
| matrix_appservice_discord_configuration_extension_yaml: | | |||
| # This is a sample of the config file showing all avaliable options. | |||
| # Where possible we have documented what they do, and all values are the | |||
| # default values. | |||
| # | |||
| #bridge: | |||
| # # Domain part of the bridge, e.g. matrix.org | |||
| # domain: "localhost" | |||
| # # This should be your publically facing URL because Discord may use it to | |||
| # # fetch media from the media store. | |||
| # homeserverUrl: "http://localhost:8008" | |||
| # # 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 | |||
| # # 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 | |||
| # Authentication configuration for the discord bot. | |||
| #auth: | |||
| # clientID: "12345" | |||
| # botToken: "foobar" | |||
| #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: "debug.log" | |||
| # disable: | |||
| # - "PresenceHandler" # Will not capture presence logging | |||
| # - file: "warn.log" # Will capture warnings | |||
| # level: "warn" | |||
| # - file: "botlogs.log" # Will capture logs from DiscordBot | |||
| # level: "info" | |||
| # enable: | |||
| # - "DiscordBot" | |||
| #database: | |||
| # userStorePath: "user-store.db" | |||
| # roomStorePath: "room-store.db" | |||
| # # 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://user:password@localhost/database_name" | |||
| #room: | |||
| # # Set the default visibility of alias rooms, defaults to "public". | |||
| # # One of: "public", "private" | |||
| # defaultVisibility: "public" | |||
| #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 unavaliable 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 | |||
| # # Delay in milliseconds before sending messages to discord to avoid 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: 750 | |||
| matrix_appservice_discord_configuration_extension: "{{ matrix_appservice_discord_configuration_extension_yaml|from_yaml if matrix_appservice_discord_configuration_extension_yaml|from_yaml else {} }}" | |||
| matrix_appservice_discord_configuration: "{{ matrix_appservice_discord_configuration_yaml|from_yaml|combine(matrix_appservice_discord_configuration_extension, recursive=True) }}" | |||
| # Controls whether searching the public room list is enabled. | |||
| matrix_enable_room_list_search: true | |||
| @@ -1,3 +0,0 @@ | |||
| --- | |||
| - import_tasks: "{{ role_path }}/tasks/ext/appservice-discord/init.yml" | |||
| @@ -5,5 +5,3 @@ | |||
| - import_tasks: "{{ role_path }}/tasks/ext/shared-secret-auth/setup.yml" | |||
| - import_tasks: "{{ role_path }}/tasks/ext/ldap-auth/setup.yml" | |||
| - import_tasks: "{{ role_path }}/tasks/ext/appservice-discord/setup.yml" | |||
| @@ -4,5 +4,3 @@ | |||
| - set_fact: | |||
| matrix_systemd_services_list: "{{ matrix_systemd_services_list + ['matrix-goofys'] }}" | |||
| when: matrix_s3_media_store_enabled | |||
| - import_tasks: "{{ role_path }}/tasks/ext/init.yml" | |||
| @@ -8,6 +8,7 @@ | |||
| - matrix-mailer | |||
| - matrix-postgres | |||
| - matrix-corporal | |||
| - matrix-bridge-appservice-discord | |||
| - matrix-bridge-appservice-irc | |||
| - matrix-bridge-mautrix-facebook | |||
| - matrix-bridge-mautrix-telegram | |||