Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • 831a382032ab9d59ea9076b1ac12f86113e3cb97
  • develop par défaut protégée
  • upgrade-appservice
  • baguette-custom-fixes
  • fix-discord-reply-edited
  • update-readme-badges
6 résultats

bot.ts

Blame
  • bot.ts 20,23 Kio
    import { DiscordBridgeConfig } from "./config";
    import { DiscordClientFactory } from "./clientfactory";
    import { DiscordStore } from "./store";
    import { DbGuildEmoji } from "./db/dbdataemoji";
    import { DbEvent } from "./db/dbdataevent";
    import { MatrixUser, RemoteUser, Bridge, Entry } from "matrix-appservice-bridge";
    import { Util } from "./util";
    import { MessageProcessor, MessageProcessorOpts } from "./messageprocessor";
    import * as Discord from "discord.js";
    import * as log from "npmlog";
    import * as Bluebird from "bluebird";
    import * as mime from "mime";
    import * as path from "path";
    import * as escapeStringRegexp from "escape-string-regexp";
    
    // Due to messages often arriving before we get a response from the send call,
    // messages get delayed from discord.
    const MSG_PROCESS_DELAY = 750;
    const PRESENCE_UPDATE_DELAY = 55000; // Synapse updates in 55 second intervals.
    class ChannelLookupResult {
      public channel: Discord.TextChannel;
      public botUser: boolean;
    }
    
    export class DiscordBot {
      private config: DiscordBridgeConfig;
      private clientFactory: DiscordClientFactory;
      private store: DiscordStore;
      private bot: Discord.Client;
      private bridge: Bridge;
      private presenceInterval: any;
      private sentMessages: string[];
      private msgProcessor: MessageProcessor;
      constructor(config: DiscordBridgeConfig, store: DiscordStore) {
        this.config = config;
        this.store = store;
        this.sentMessages = [];
        this.clientFactory = new DiscordClientFactory(store, config.auth);
        this.msgProcessor = new MessageProcessor(
            new MessageProcessorOpts(this.config.bridge.domain),
            this,
        );
      }
    
      public setBridge(bridge: Bridge) {
        this.bridge = bridge;
      }
    
      get ClientFactory(): DiscordClientFactory {
         return this.clientFactory;
      }
    
      public run (): Promise<null> {
        return this.clientFactory.init().then(() => {
          return this.clientFactory.getClient();
        }).then((client: any) => {
          client.on("typingStart", (c, u) => { this.OnTyping(c, u, true); });
          client.on("typingStop", (c, u) => { this.OnTyping(c, u, false); });
          client.on("userUpdate", (_, newUser) => { this.UpdateUser(newUser); });
          client.on("channelUpdate", (_, newChannel) => { this.UpdateRooms(newChannel); });
          client.on("presenceUpdate", (_, newMember) => { this.UpdatePresence(newMember); });
          client.on("guildMemberAdd", (newMember) => { this.AddGuildMember(newMember); });
          client.on("guildMemberRemove", (oldMember) => { this.RemoveGuildMember(oldMember); });
          client.on("guildMemberUpdate", (_, newMember) => { this.UpdateGuildMember(newMember); });
          client.on("message", (msg) => { Bluebird.delay(MSG_PROCESS_DELAY).then(() => {
              this.OnMessage(msg);
            });
          });
          log.info("DiscordBot", "Discord bot client logged in.");
          this.bot = client;