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]>;