diff --git a/.eslintrc b/.eslintrc
index fe208ed36c7e569b610960cfaba69617d948f3ab..7916d955231eb0eec33d144324be80f317a9fe88 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -40,6 +40,7 @@
         "@typescript-eslint/no-use-before-define": "off",
         "@typescript-eslint/no-inferrable-types": "off",
         "@typescript-eslint/member-delimiter-style": "off",
-        "@typescript-eslint/no-unused-expressions": "off"
+        "@typescript-eslint/no-unused-expressions": "off",
+        "@typescript-eslint/interface-name-prefix": "off"
     }
 }
diff --git a/src/db/dbdataemoji.ts b/src/db/dbdataemoji.ts
index 9b076b6c407c9fb41291a6a42d80111203623c7c..6e74bd56aaf37da404b0c231c366712ccea418be 100644
--- a/src/db/dbdataemoji.ts
+++ b/src/db/dbdataemoji.ts
@@ -39,9 +39,9 @@ export class DbEmoji implements IDbData {
                 WHERE mxc_url = $mxc`;
         }
         const row = await store.db.Get(query, {
-                id: params.emoji_id,
-                mxc: params.mxc_url,
-            });
+            id: params.emoji_id,
+            mxc: params.mxc_url,
+        });
         this.Result = Boolean(row); // check if row exists
         if (this.Result && row) {
             this.EmojiId = row.emoji_id as string;
@@ -60,12 +60,14 @@ export class DbEmoji implements IDbData {
             INSERT INTO emoji
             (emoji_id,name,animated,mxc_url,created_at,updated_at)
             VALUES ($emoji_id,$name,$animated,$mxc_url,$created_at,$updated_at);`, {
-                animated: Number(this.Animated),
-                created_at: this.CreatedAt,
-                emoji_id: this.EmojiId,
-                mxc_url: this.MxcUrl,
-                name: this.Name,
-                updated_at: this.UpdatedAt,
+            /* eslint-disable @typescript-eslint/camelcase */
+            animated: Number(this.Animated),
+            created_at: this.CreatedAt,
+            emoji_id: this.EmojiId,
+            mxc_url: this.MxcUrl,
+            name: this.Name,
+            updated_at: this.UpdatedAt,
+            /* eslint-enable @typescript-eslint/camelcase */
         });
     }
 
@@ -80,11 +82,13 @@ export class DbEmoji implements IDbData {
             updated_at = $updated_at
             WHERE
             emoji_id = $emoji_id`, {
-                animated: Number(this.Animated),
-                emoji_id: this.EmojiId,
-                mxc_url: this.MxcUrl,
-                name: this.Name,
-                updated_at: this.UpdatedAt,
+            /* eslint-disable @typescript-eslint/camelcase */
+            animated: Number(this.Animated),
+            emoji_id: this.EmojiId,
+            mxc_url: this.MxcUrl,
+            name: this.Name,
+            updated_at: this.UpdatedAt,
+            /* eslint-enable @typescript-eslint/camelcase */
         });
     }
 
diff --git a/src/db/dbdataevent.ts b/src/db/dbdataevent.ts
index 30db142bebd5fd69dfd3e0b295dd748fc22b9f19..cfe5c3f0fd1e779a727619bcfeef28b98f550ddb 100644
--- a/src/db/dbdataevent.ts
+++ b/src/db/dbdataevent.ts
@@ -40,14 +40,14 @@ export class DbEvent implements IDbDataMany {
                 SELECT *
                 FROM event_store
                 WHERE matrix_id = $id`, {
-                    id: params.matrix_id,
+                id: params.matrix_id,
             });
         } else if (params.discord_id) {
             rowsM = await store.db.All(`
                 SELECT *
                 FROM event_store
                 WHERE discord_id = $id`, {
-                    id: params.discord_id,
+                id: params.discord_id,
             });
         } else {
             throw new Error("Unknown/incorrect id given as a param");
@@ -55,20 +55,24 @@ export class DbEvent implements IDbDataMany {
 
         for (const rowM of rowsM) {
             const row = {
+                /* eslint-disable @typescript-eslint/camelcase */
                 discord_id: rowM.discord_id,
                 matrix_id: rowM.matrix_id,
+                /* eslint-enable @typescript-eslint/camelcase */
             };
             for (const rowD of await store.db.All(`
                     SELECT *
                     FROM discord_msg_store
                     WHERE msg_id = $id`, {
-                        id: rowM.discord_id,
+                id: rowM.discord_id,
             })) {
-                // eslint-disable-next-line @typescript-eslint/no-explicit-any
-                const insertRow: any = Object.assign({}, row);
-                insertRow.guild_id = rowD.guild_id;
-                insertRow.channel_id = rowD.channel_id;
-                this.rows.push(insertRow);
+                this.rows.push({
+                    /* eslint-disable @typescript-eslint/camelcase */
+                    ...row,
+                    guild_id: rowD.guild_id,
+                    channel_id: rowD.channel_id,
+                    /* eslint-enable @typescript-eslint/camelcase */
+                });
             }
         }
         this.Result = this.rows.length !== 0;
@@ -91,15 +95,17 @@ export class DbEvent implements IDbDataMany {
             INSERT INTO event_store
             (matrix_id,discord_id)
             VALUES ($matrix_id,$discord_id);`, {
-                discord_id: this.DiscordId,
-                matrix_id: this.MatrixId,
+            /* eslint-disable @typescript-eslint/camelcase */
+            discord_id: this.DiscordId,
+            matrix_id: this.MatrixId,
+            /* eslint-enable @typescript-eslint/camelcase */
         });
         // Check if the discord item exists?
         const msgExists = await store.db.Get(`
                 SELECT *
                 FROM discord_msg_store
                 WHERE msg_id = $id`, {
-                    id: this.DiscordId,
+            id: this.DiscordId,
         }) != null;
         if (msgExists) {
             return;
@@ -108,9 +114,11 @@ export class DbEvent implements IDbDataMany {
             INSERT INTO discord_msg_store
             (msg_id, guild_id, channel_id)
             VALUES ($msg_id, $guild_id, $channel_id);`, {
-                channel_id: this.ChannelId,
-                guild_id: this.GuildId,
-                msg_id: this.DiscordId,
+            /* eslint-disable @typescript-eslint/camelcase */
+            channel_id: this.ChannelId,
+            guild_id: this.GuildId,
+            msg_id: this.DiscordId,
+            /* eslint-enable @typescript-eslint/camelcase */
         });
     }
 
@@ -123,13 +131,17 @@ export class DbEvent implements IDbDataMany {
             DELETE FROM event_store
             WHERE matrix_id = $matrix_id
             AND discord_id = $discord_id;`, {
-                discord_id: this.DiscordId,
-                matrix_id: this.MatrixId,
+            /* eslint-disable @typescript-eslint/camelcase */
+            discord_id: this.DiscordId,
+            matrix_id: this.MatrixId,
+            /* eslint-enable @typescript-eslint/camelcase */
         });
         return store.db.Run(`
             DELETE FROM discord_msg_store
             WHERE msg_id = $discord_id;`, {
-                discord_id: this.DiscordId,
+            /* eslint-disable @typescript-eslint/camelcase */
+            discord_id: this.DiscordId,
+            /* eslint-enable @typescript-eslint/camelcase */
         });
     }
 }
diff --git a/src/db/roomstore.ts b/src/db/roomstore.ts
index 3e04cbf88dd5e378ce8d358d73a50709e200fe0c..aca61771d9cfd9d0041ae66de4ff15eedca9dbd3 100644
--- a/src/db/roomstore.ts
+++ b/src/db/roomstore.ts
@@ -52,7 +52,7 @@ export class RemoteStoreRoom {
     public data: IRemoteRoomDataLazy;
     constructor(public readonly roomId: string, data: IRemoteRoomDataLazy) {
         for (const k of ["discord_guild", "discord_channel", "discord_name",
-        "discord_topic", "discord_iconurl", "discord_iconurl_mxc", "discord_type"]) {
+            "discord_topic", "discord_iconurl", "discord_iconurl_mxc", "discord_type"]) {
             data[k] = typeof(data[k]) === "number" ? String(data[k]) : data[k] || null;
         }
         for (const k of ["update_name", "update_topic", "update_icon", "plumbed"]) {
@@ -112,7 +112,7 @@ export class DbRoomStore {
             };
             try {
                 await this.db.Run(`INSERT INTO room_entries VALUES ($id, $matrix, $remote)`, values);
-                log.verbose("Created new entry " + entry.id);
+                log.verbose(`Created new entry ${entry.id}`);
             } catch (ex) {
                 log.error("Failed to insert room entry", ex);
                 throw Error("Failed to insert room entry");
@@ -237,7 +237,7 @@ export class DbRoomStore {
 
         try {
             await this.db.Run(`INSERT INTO room_entries VALUES ($id, $matrix, $remote)`, values);
-            log.verbose("Created new entry " + values.id);
+            log.verbose(`Created new entry ${  values.id}`);
         } catch (ex) {
             log.error("Failed to insert room entry", ex);
             throw Error("Failed to insert room entry");
@@ -305,6 +305,7 @@ export class DbRoomStore {
         );
 
         const data = {
+            /* eslint-disable @typescript-eslint/camelcase */
             discord_channel:     room.data.discord_channel,
             discord_guild:       room.data.discord_guild,
             discord_iconurl:     room.data.discord_iconurl,
@@ -316,12 +317,13 @@ export class DbRoomStore {
             update_icon:         Number(room.data.update_icon || 0),
             update_name:         Number(room.data.update_name || 0),
             update_topic:        Number(room.data.update_topic || 0),
+            /* eslint-enable @typescript-eslint/camelcase */
         } as IRemoteRoomData;
 
         if (!existingRow) {
             // Insert new data.
             await this.db.Run(
-            `INSERT INTO remote_room_data VALUES (
+                `INSERT INTO remote_room_data VALUES (
                 $id,
                 $discord_guild,
                 $discord_channel,
@@ -336,11 +338,11 @@ export class DbRoomStore {
                 $plumbed
             )
             `,
-            {
-                id: room.roomId,
-                // eslint-disable-next-line @typescript-eslint/no-explicit-any
-                ...data as any,
-            });
+                {
+                    id: room.roomId,
+                    // eslint-disable-next-line @typescript-eslint/no-explicit-any
+                    ...data as any,
+                });
             return;
         }
 
@@ -349,8 +351,8 @@ export class DbRoomStore {
         // New keys
         Object.keys(room.data).filter(
             (k: string) => existingRow[k] === null).forEach((key) => {
-                const val = room.data[key];
-                keysToUpdate[key] = typeof val === "boolean" ? Number(val) : val;
+            const val = room.data[key];
+            keysToUpdate[key] = typeof val === "boolean" ? Number(val) : val;
         });
 
         // Updated keys
@@ -370,12 +372,12 @@ export class DbRoomStore {
 
         try {
             await this.db.Run(`UPDATE remote_room_data SET ${setStatement} WHERE room_id = $id`,
-            {
-                id: room.roomId,
-                // eslint-disable-next-line @typescript-eslint/no-explicit-any
-                ...keysToUpdate as any,
-            });
-            log.verbose("Upserted room " + room.roomId);
+                {
+                    id: room.roomId,
+                    // eslint-disable-next-line @typescript-eslint/no-explicit-any
+                    ...keysToUpdate as any,
+                });
+            log.verbose(`Upserted room ${  room.roomId}`);
         } catch (ex) {
             log.error("Failed to upsert room", ex);
             throw Error("Failed to upsert room");
diff --git a/src/db/userstore.ts b/src/db/userstore.ts
index 7e84dc0a84faf4767a188349e11236ef34586d9c..f922b68a183326c327159452467a42b1b585df02 100644
--- a/src/db/userstore.ts
+++ b/src/db/userstore.ts
@@ -13,6 +13,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
 */
+/* eslint-disable max-classes-per-file */
 
 import { IDatabaseConnector } from "./connector";
 import { Log } from "../log";
@@ -81,9 +82,11 @@ export class DbUserStore {
             {remoteId},
         );
         if (nicks) {
+            /* eslint-disable @typescript-eslint/camelcase */
             nicks.forEach(({nick, guild_id}) => {
                 remoteUser.guildNicks.set(guild_id as string, nick as string);
             });
+            /* eslint-enable @typescript-eslint/camelcase */
         }
         this.remoteUserCache.set(remoteId, remoteUser);
         return remoteUser;
@@ -98,35 +101,39 @@ export class DbUserStore {
         );
         if (!existingData) {
             await this.db.Run(
-            `INSERT INTO remote_user_data VALUES (
-                $remote_id,
-                $displayname,
-                $avatarurl,
-                $avatarurl_mxc
-            )`,
-            {
-                avatarurl: user.avatarurl,
-                avatarurl_mxc: user.avatarurlMxc,
-                displayname: user.displayname,
-                remote_id: user.id,
-            });
+                `INSERT INTO remote_user_data VALUES (
+                    $remote_id,
+                    $displayname,
+                    $avatarurl,
+                    $avatarurl_mxc
+                )`,
+                {
+                    /* eslint-disable @typescript-eslint/camelcase */
+                    avatarurl: user.avatarurl,
+                    avatarurl_mxc: user.avatarurlMxc,
+                    displayname: user.displayname,
+                    remote_id: user.id,
+                    /* eslint-enable @typescript-eslint/camelcase */
+                });
         } else {
             await this.db.Run(
-`UPDATE remote_user_data SET displayname = $displayname,
+                `UPDATE remote_user_data SET displayname = $displayname,
 avatarurl = $avatarurl,
 avatarurl_mxc = $avatarurl_mxc WHERE remote_id = $remote_id`,
-            {
-                avatarurl: user.avatarurl,
-                avatarurl_mxc: user.avatarurlMxc,
-                displayname: user.displayname,
-                remote_id: user.id,
-            });
+                {
+                    /* eslint-disable @typescript-eslint/camelcase */
+                    avatarurl: user.avatarurl,
+                    avatarurl_mxc: user.avatarurlMxc,
+                    displayname: user.displayname,
+                    remote_id: user.id,
+                    /* eslint-enable @typescript-eslint/camelcase */
+                });
         }
         const existingNicks = {};
         (await this.db.All(
             "SELECT guild_id, nick FROM remote_user_guild_nicks WHERE remote_id = $remoteId",
             {remoteId: user.id},
-        )).forEach(({guild_id, nick}) => existingNicks[guild_id as string] = nick);
+        )).forEach(({guild_id, nick}) => existingNicks[guild_id as string] = nick); // eslint-disable-line @typescript-eslint/camelcase
         for (const guildId of user.guildNicks.keys()) {
             const nick = user.guildNicks.get(guildId) || null;
             if (existingData) {
@@ -134,28 +141,32 @@ avatarurl_mxc = $avatarurl_mxc WHERE remote_id = $remote_id`,
                     return;
                 } else if (existingNicks[guildId]) {
                     await this.db.Run(
-`UPDATE remote_user_guild_nicks SET nick = $nick
+                        `UPDATE remote_user_guild_nicks SET nick = $nick
 WHERE remote_id = $remote_id
 AND guild_id = $guild_id`,
-                    {
-                        guild_id: guildId,
-                        nick,
-                        remote_id: user.id,
-                    });
+                        {
+                            /* eslint-disable @typescript-eslint/camelcase */
+                            guild_id: guildId,
+                            nick,
+                            remote_id: user.id,
+                            /* eslint-enable @typescript-eslint/camelcase */
+                        });
                     return;
                 }
             }
             await this.db.Run(
-            `INSERT INTO remote_user_guild_nicks VALUES (
+                `INSERT INTO remote_user_guild_nicks VALUES (
                 $remote_id,
                 $guild_id,
                 $nick
             )`,
-            {
-                guild_id: guildId,
-                nick,
-                remote_id: user.id,
-            });
+                {
+                    /* eslint-disable @typescript-eslint/camelcase */
+                    guild_id: guildId,
+                    nick,
+                    remote_id: user.id,
+                    /* eslint-enable @typescript-eslint/camelcase */
+                });
         }
 
     }
diff --git a/src/matrixcommandhandler.ts b/src/matrixcommandhandler.ts
index 56fbc67113b0754778ee38d06081525ebbf6b106..2dd9ec170566b6552376fab9b7758e0a1eb84f28 100644
--- a/src/matrixcommandhandler.ts
+++ b/src/matrixcommandhandler.ts
@@ -187,10 +187,12 @@ export class MatrixCommandHandler {
         const reply = await Util.ParseCommand("!discord", event.content!.body!, actions, parameters, permissionCheck);
         const formattedReply = markdown(reply);
         await this.bridge.botClient.sendMessage(event.room_id, {
+            /* eslint-disable @typescript-eslint/camelcase */
             body: reply,
             format: "org.matrix.custom.html",
             formatted_body: formattedReply,
             msgtype: "m.notice",
+            /* eslint-enable @typescript-eslint/camelcase */
         });
     }
 
diff --git a/src/structures/timedcache.ts b/src/structures/timedcache.ts
index 93424af9d488d493439bd4294dc969297f79eeee..06b2c1288ee4174bbfa7a4c07c443f8e72f3e92b 100644
--- a/src/structures/timedcache.ts
+++ b/src/structures/timedcache.ts
@@ -1,3 +1,6 @@
+import { Log } from "../log";
+const log = new Log("Timedcache");
+
 interface ITimedValue<V> {
     value: V;
     ts: number;
@@ -20,7 +23,10 @@ export class TimedCache<K, V> implements Map<K, V> {
 
     public forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void|Promise<void>): void {
         for (const item of this) {
-            callbackfn(item[1], item[0], this);
+            const potentialPromise = callbackfn(item[1], item[0], this);
+            if (potentialPromise) {
+                potentialPromise.catch(log.warn);
+            }
         }
     }
 
@@ -73,7 +79,7 @@ export class TimedCache<K, V> implements Map<K, V> {
                 }
                 if (item.done) {
                     // Typscript doesn't like us returning undefined for value, which is dumb.
-                    // tslint:disable-next-line: no-any
+                    // eslint-disable-next-line @typescript-eslint/no-explicit-any
                     return {done: true, value: undefined} as any as IteratorResult<[K, V]>;
                 }
                 return {done: false, value: [item.value[0], filteredValue]} as IteratorResult<[K, V]>;