diff --git a/src/discordbot.ts b/src/bot.ts similarity index 95% rename from src/discordbot.ts rename to src/bot.ts index 9379a2dd428ccd16a4778e00488cb73da8049284..43d93e297abc6d661eb87139ade9b829561d48ca 100644 --- a/src/discordbot.ts +++ b/src/bot.ts @@ -1,6 +1,7 @@ import { DiscordBridgeConfig } from "./config"; -import { DiscordClientFactory } from "./discordclientfactory"; -import { DiscordStore } from "./discordstore"; +import { DiscordClientFactory } from "./clientfactory"; +import { DiscordStore } from "./store"; +import { DiscordDMHandler } from "./dmhandler"; import { MatrixUser, RemoteUser, Bridge, RemoteRoom } from "matrix-appservice-bridge"; import { Util } from "./util"; import * as Discord from "discord.js"; @@ -8,6 +9,7 @@ import * as log from "npmlog"; import * as Bluebird from "bluebird"; import * as mime from "mime"; import * as marked from "marked"; +import * as path from "path"; // Due to messages often arriving before we get a response from the send call, // messages get delayed from discord. @@ -149,9 +151,10 @@ export class DiscordBot { return Promise.resolve(null); }).then((attachment) => { if (attachment !== null) { + let name = this.GetFilenameForMediaEvent(event.content); return { file : { - name: event.content.body, + name, attachment, }, }; @@ -173,6 +176,16 @@ export class DiscordBot { return false; } + private GetFilenameForMediaEvent(content) { + if (content.body) { + if (path.extname(content.body) !== "") { + return content.body; + } + return path.basename(content.body) + "." + mime.extension(content.mimetype); + } + return "matrix-media." + mime.extension(content.mimetype); + } + private GetRoomIdFromChannel(channel: Discord.Channel): Promise<string> { return this.bridge.getRoomStore().getEntriesByRemoteRoomData({ discord_channel: channel.id, diff --git a/src/discordclientfactory.ts b/src/clientfactory.ts similarity index 92% rename from src/discordclientfactory.ts rename to src/clientfactory.ts index 461843e38fda9c9bc40f02269762837dad8833a3..f8e9958c7aeda30ed73254ff1f50107f6eed4100 100644 --- a/src/discordclientfactory.ts +++ b/src/clientfactory.ts @@ -1,5 +1,5 @@ import { DiscordBridgeConfigAuth } from "./config"; -import { DiscordStore } from "./discordstore"; +import { DiscordStore } from "./store"; import { Client } from "discord.js"; import * as log from "npmlog"; import * as Bluebird from "bluebird"; @@ -8,7 +8,7 @@ export class DiscordClientFactory { private config: DiscordBridgeConfigAuth; private store: DiscordStore; private botClient: any; - private clients: Map<string,any>; + private clients: Map<string, any>; constructor(config: DiscordBridgeConfigAuth, store: DiscordStore) { this.config = config; this.clients = new Map(); @@ -21,12 +21,13 @@ export class DiscordClientFactory { this.botClient = Bluebird.promisifyAll(new Client({ fetchAllMembers: true, sync: true, + messageCacheLifetime: 5, })); return this.botClient.login(this.config.botToken).then(() => { return null; // Strip token from promise. }).catch((err) => { log.error("ClientFactory", "Could not login as the bot user. This is bad!"); - }) + }); } public getClient(userId?: string): Promise<any> { @@ -43,6 +44,7 @@ export class DiscordClientFactory { client = Bluebird.promisifyAll(new Client({ fetchAllMembers: true, sync: true, + messageCacheLifetime: 5, })); log.verbose("ClientFactory", "Got user token. Logging in..."); return client.login(token).then(() => { @@ -51,7 +53,7 @@ export class DiscordClientFactory { return Promise.resolve(client); }).catch((err) => { log.warn("ClientFactory", `Could not log ${userId} in.`, err); - }) + }); }); // Get from cache } diff --git a/src/dbschema/dbschema.ts b/src/dbschema/dbschema.ts index e8b7cfdc625be7662f5e0cad1a910c78efd9025c..ddb4310aeac765f916d80aea3e750c4bc03ee2fe 100644 --- a/src/dbschema/dbschema.ts +++ b/src/dbschema/dbschema.ts @@ -1,4 +1,4 @@ -import { DiscordStore } from "../discordstore"; +import { DiscordStore } from "../store"; export interface IDbSchema { description: string, run(store: DiscordStore): Promise<null>; diff --git a/src/dbschema/v1.ts b/src/dbschema/v1.ts index 474544f7cfa27b50984e0711a479046c81c731bc..ca542623e9df7ec6ae46599c4eaf5e4e2be8c3e4 100644 --- a/src/dbschema/v1.ts +++ b/src/dbschema/v1.ts @@ -1,5 +1,5 @@ import {IDbSchema} from "./dbschema"; -import {DiscordStore} from "../discordstore"; +import {DiscordStore} from "../store"; export class Schema implements IDbSchema { public description = "Schema, Client Auth Table"; public run(store: DiscordStore): Promise<null> { diff --git a/src/discordas.ts b/src/discordas.ts index 7d913fcb1f6cf94f9c3b1f8cedacada77a437fa4..c8d6eb6262847b4df5368be32e00b0457a424281 100644 --- a/src/discordas.ts +++ b/src/discordas.ts @@ -3,9 +3,9 @@ import * as log from "npmlog"; import * as yaml from "js-yaml"; import * as fs from "fs"; import { DiscordBridgeConfig } from "./config"; -import { DiscordBot } from "./discordbot"; +import { DiscordBot } from "./bot"; import { MatrixRoomHandler } from "./matrixroomhandler"; -import { DiscordStore } from "./discordstore"; +import { DiscordStore } from "./store"; const cli = new Cli({ bridgeConfig: { @@ -62,7 +62,7 @@ function run (port: number, config: DiscordBridgeConfig) { thirdPartyLookup: roomhandler.ThirdPartyLookup, onLog: (line, isError) => { log.verbose("matrix-appservice-bridge", line); - } + }, }, domain: config.bridge.domain, homeserverUrl: config.bridge.homeserverUrl, diff --git a/src/matrixroomhandler.ts b/src/matrixroomhandler.ts index a705064e2a0356f1d8d90befd4c17a86e83c33b7..d719cd0ab256a14f42c456fbe36a98cdeac5d1ca 100644 --- a/src/matrixroomhandler.ts +++ b/src/matrixroomhandler.ts @@ -1,4 +1,4 @@ -import { DiscordBot } from "./discordbot"; +import { DiscordBot } from "./bot"; import { Bridge, RemoteRoom, @@ -8,7 +8,7 @@ import { thirdPartyLocationResult, } from "matrix-appservice-bridge"; import { DiscordBridgeConfig } from "./config"; -import { DiscordClientFactory } from "./discordclientfactory"; +import { DiscordClientFactory } from "./clientfactory"; import * as Discord from "discord.js"; import * as log from "npmlog"; diff --git a/src/discordstore.ts b/src/store.ts similarity index 88% rename from src/discordstore.ts rename to src/store.ts index 83d981799427fccf16ef07326016789f5b114f4a..1c1799f9d0dc5161d87a3436fc1c6dde1e494bab 100644 --- a/src/discordstore.ts +++ b/src/store.ts @@ -74,8 +74,8 @@ export class DiscordStore { `REPLACE INTO user_tokens (userId,token) VALUES ($id,$token);` , { $id: userId, - $token: token - }).catch(err => { + $token: token, + }).catch( (err) => { log.error("TwitDB", "Error storing user token %s", err); throw err; }); @@ -90,10 +90,25 @@ export class DiscordStore { WHERE user_tokens.userId = $id; ` , { - $id: userId - }).then(row => { + $id: userId, + }).then( (row) => { return row !== undefined ? row.token : null; - }).catch( err => { + }).catch( (err) => { + log.error("TwitDB", "Error getting user token %s", err.Error); + throw err; + }); + } + + public get_users_tokens(): Promise<any> { + log.silly("SQL", "get_users_tokens"); + return this.db.allAsync( + ` + SELECT * + FROM user_tokens + `, + ).then( (rows) => { + return rows; + }).catch( (err) => { log.error("TwitDB", "Error getting user token %s", err.Error); throw err; });