matrix-org / matrix-appservice-discord

A bridge between Matrix and Discord.
Apache License 2.0
804 stars 152 forks source link

Bot is online on Discord but offline on matrix #861

Open miabl0 opened 1 year ago

miabl0 commented 1 year ago

I am running a Synapse Server and have my discord-registration.yaml in the app_service_config_files of my homeserver.yaml. Relevant Configs: discord-registration.yaml

 as_token:************
 hs_token: ***********
 id: discord-bridge_bot
 namespaces:
   aliases:
     - exclusive: true
       regex: '#_discord_user_bridge_.*:matrix.base.domain'
   rooms: []
   users:
     - exclusive: true
       regex: '@_discord_user_bridge_.*:matrix.base.domain'
 protocols:
   - discord
 rate_limited: false
 sender_localpart: _discord_user_bridge_
 url: 'https//subdomain.base.domain:9005'

config.yaml

  # Domain part of the bridge, e.g. matrix.org
  domain: "matrix.base.domain"
  # This should be your publicly-facing URL because Discord may use it to
  # fetch media from the media store.
  homeserverUrl: "https://subdomain.base.domain:443"
  # 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: true
  # Disable sending of read receipts for Matrix events which have been
  # successfully bridged to Discord.
  disableReadReceipts: false
  # Disable Join Leave echos from matrix
  disableJoinLeaveNotifications: false
  # Disable Invite echos from matrix
  disableInviteNotifications: false
  # Disable Room Topic echos from matrix
  disableRoomTopicNotifications: false
  # Auto-determine the language of code blocks (this can be CPU-intensive)
  determineCodeLanguage: false
  # MXID of an admin user that will be PMd if the bridge experiences problems. Optional
  adminMxid: '@admin:localhost'
  # The message to send to the bridge admin if the Discord token is not valid
  invalidTokenMessage: 'Your Discord bot token seems to be invalid, and the bridge cannot function. Please update it in your bridge settings and restart the bridge'
# Authentication configuration for the discord bot.
auth:
  # This MUST be a string (wrapped in quotes)
  clientID: "myid"
  botToken: "mytoken"
  # 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: "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:
  # 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: "/data/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 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"

I start the docker container using sudo docker run -v /matrix-appservice-discord:/data -p 9005:9005 halfshot/matrix-appservice-discord

The container outputs: nothing, it just runs, no shell output

When trying to invite the user _discord_userbridge:matrix.base.domain to my room, element tells me:

The following users may not exist Unable to find profiles for the Matrix IDs listed below - would you like to invite them anyway? @_disccord_userbridge:matrix.base.domain: User may or may not exist

Why is the bot not online? Port 9005 IS exposed externally, reverseproxy for port 9005 is also setup. What am I doing wrong?

Akselmo commented 1 year ago

Same issue for me, I have no idea why this is happening.

Tried to invite the bot and

Nov-11 22:52:45.913 [bot-sdkAppservice] ^[[32minfo^[[39m: [ 'Processing event of type m.room.member' ]
Nov-11 22:52:45.933 [bot-sdkAppservice] ^[[32minfo^[[39m: [
  '135.181.89.181 - - [11/Nov/2022:22:52:45 +0000] "PUT /transactions/278202?access_token=%3Credacted%3E HTTP/1.1" 200 2 "-" "Synapse/1.71.0"\n'
] 

But it didn't join

Akselmo commented 1 year ago

I managed to solve this issue for myself by just removing the database and re-setuping the bot by following the instructions, but using different name for the bot. (Changed the localpart in the discord registration file)

Not optimal but it works now for me.

Mrs-Feathers commented 1 year ago

how stable is that?

were you able to keep the chats without having to delete and readd them? i just got done making a bunch of chats just to have it randomly stop working and that's gonna be horrible to have them needing to be deleted or recreated expecially because they have the specific ID the bot needs. same with the _matrix webhook on discord.

but if its just stopping it, deleting the database and changing something in discord-registration.yaml in matrix and the bot servers and restarting the bot... then i can deal with that.