Enable ts-check on event-dispatcher
This commit is contained in:
		
							parent
							
								
									20bab453ef
								
							
						
					
					
						commit
						600ca1a11d
					
				
					 1 changed files with 28 additions and 20 deletions
				
			
		| 
						 | 
					@ -1,3 +1,5 @@
 | 
				
			||||||
 | 
					// @ts-check
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const assert = require("assert").strict
 | 
					const assert = require("assert").strict
 | 
				
			||||||
const DiscordTypes = require("discord-api-types/v10")
 | 
					const DiscordTypes = require("discord-api-types/v10")
 | 
				
			||||||
const util = require("util")
 | 
					const util = require("util")
 | 
				
			||||||
| 
						 | 
					@ -47,27 +49,33 @@ module.exports = {
 | 
				
			||||||
		if (Date.now() - lastReportedEvent < 5000) return
 | 
							if (Date.now() - lastReportedEvent < 5000) return
 | 
				
			||||||
		lastReportedEvent = Date.now()
 | 
							lastReportedEvent = Date.now()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		const channelID = gatewayMessage.d.channel_id
 | 
							const channelID = gatewayMessage.d["channel_id"]
 | 
				
			||||||
		if (!channelID) return
 | 
							if (!channelID) return
 | 
				
			||||||
		const roomID = select("channel_room", "room_id", {channel_id: channelID}).pluck().get()
 | 
							const roomID = select("channel_room", "room_id", {channel_id: channelID}).pluck().get()
 | 
				
			||||||
		if (!roomID) return
 | 
							if (!roomID) return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		let stackLines = e.stack.split("\n")
 | 
							let stackLines = null
 | 
				
			||||||
		let cloudstormLine = stackLines.findIndex(l => l.includes("/node_modules/cloudstorm/"))
 | 
							if (e.stack) {
 | 
				
			||||||
		if (cloudstormLine !== -1) {
 | 
								stackLines = e.stack.split("\n")
 | 
				
			||||||
			stackLines = stackLines.slice(0, cloudstormLine - 2)
 | 
								let cloudstormLine = stackLines.findIndex(l => l.includes("/node_modules/cloudstorm/"))
 | 
				
			||||||
 | 
								if (cloudstormLine !== -1) {
 | 
				
			||||||
 | 
									stackLines = stackLines.slice(0, cloudstormLine - 2)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							let formattedBody = "\u26a0 <strong>Bridged event from Discord not delivered</strong>"
 | 
				
			||||||
 | 
								+ `<br>Gateway event: ${gatewayMessage.t}`
 | 
				
			||||||
 | 
								+ `<br>${e.toString()}`
 | 
				
			||||||
 | 
							if (stackLines) {
 | 
				
			||||||
 | 
								formattedBody += `<br><details><summary>Error trace</summary>`
 | 
				
			||||||
 | 
									+ `<pre>${stackLines.join("\n")}</pre></details>`
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							formattedBody += `<details><summary>Original payload</summary>`
 | 
				
			||||||
 | 
								+ `<pre>${util.inspect(gatewayMessage.d, false, 4, false)}</pre></details>`,
 | 
				
			||||||
		api.sendEvent(roomID, "m.room.message", {
 | 
							api.sendEvent(roomID, "m.room.message", {
 | 
				
			||||||
			msgtype: "m.text",
 | 
								msgtype: "m.text",
 | 
				
			||||||
			body: "\u26a0 Bridged event from Discord not delivered. See formatted content for full details.",
 | 
								body: "\u26a0 Bridged event from Discord not delivered. See formatted content for full details.",
 | 
				
			||||||
			format: "org.matrix.custom.html",
 | 
								format: "org.matrix.custom.html",
 | 
				
			||||||
			formatted_body: "\u26a0 <strong>Bridged event from Discord not delivered</strong>"
 | 
								formatted_body: formattedBody,
 | 
				
			||||||
				+ `<br>Gateway event: ${gatewayMessage.t}`
 | 
					 | 
				
			||||||
				+ `<br>${e.toString()}`
 | 
					 | 
				
			||||||
				+ `<br><details><summary>Error trace</summary>`
 | 
					 | 
				
			||||||
				+ `<pre>${stackLines.join("\n")}</pre></details>`
 | 
					 | 
				
			||||||
				+ `<details><summary>Original payload</summary>`
 | 
					 | 
				
			||||||
				+ `<pre>${util.inspect(gatewayMessage.d, false, 4, false)}</pre></details>`,
 | 
					 | 
				
			||||||
			"moe.cadence.ooye.error": {
 | 
								"moe.cadence.ooye.error": {
 | 
				
			||||||
				source: "discord",
 | 
									source: "discord",
 | 
				
			||||||
				payload: gatewayMessage
 | 
									payload: gatewayMessage
 | 
				
			||||||
| 
						 | 
					@ -91,7 +99,7 @@ module.exports = {
 | 
				
			||||||
		const prepared = select("event_message", "event_id", {}, "WHERE message_id = ?").pluck()
 | 
							const prepared = select("event_message", "event_id", {}, "WHERE message_id = ?").pluck()
 | 
				
			||||||
		for (const channel of guild.channels.concat(guild.threads)) {
 | 
							for (const channel of guild.channels.concat(guild.threads)) {
 | 
				
			||||||
			if (!bridgedChannels.includes(channel.id)) continue
 | 
								if (!bridgedChannels.includes(channel.id)) continue
 | 
				
			||||||
			if (!channel.last_message_id) continue
 | 
								if (!("last_message_id" in channel) || !channel.last_message_id) continue
 | 
				
			||||||
			const latestWasBridged = prepared.get(channel.last_message_id)
 | 
								const latestWasBridged = prepared.get(channel.last_message_id)
 | 
				
			||||||
			if (latestWasBridged) continue
 | 
								if (latestWasBridged) continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -116,7 +124,6 @@ module.exports = {
 | 
				
			||||||
			for (let i = Math.min(messages.length, latestBridgedMessageIndex)-1; i >= 0; i--) {
 | 
								for (let i = Math.min(messages.length, latestBridgedMessageIndex)-1; i >= 0; i--) {
 | 
				
			||||||
				const simulatedGatewayDispatchData = {
 | 
									const simulatedGatewayDispatchData = {
 | 
				
			||||||
					guild_id: guild.id,
 | 
										guild_id: guild.id,
 | 
				
			||||||
					mentions: [],
 | 
					 | 
				
			||||||
					backfill: true,
 | 
										backfill: true,
 | 
				
			||||||
					...messages[i]
 | 
										...messages[i]
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
| 
						 | 
					@ -127,7 +134,6 @@ module.exports = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * When logging back in, check if we missed any changes to emojis or stickers. Apply the changes if so.
 | 
						 * When logging back in, check if we missed any changes to emojis or stickers. Apply the changes if so.
 | 
				
			||||||
	 * @param {import("./discord-client")} client
 | 
					 | 
				
			||||||
	 * @param {DiscordTypes.GatewayGuildCreateDispatchData} guild
 | 
						 * @param {DiscordTypes.GatewayGuildCreateDispatchData} guild
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	async checkMissedExpressions(guild) {
 | 
						async checkMissedExpressions(guild) {
 | 
				
			||||||
| 
						 | 
					@ -142,7 +148,8 @@ module.exports = {
 | 
				
			||||||
	 * @param {DiscordTypes.APIThreadChannel} thread
 | 
						 * @param {DiscordTypes.APIThreadChannel} thread
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	async onThreadCreate(client, thread) {
 | 
						async onThreadCreate(client, thread) {
 | 
				
			||||||
		const parentRoomID = select("channel_room", "room_id", {channel_id: thread.parent_id}).pluck().get()
 | 
							const channelID = thread.parent_id || undefined
 | 
				
			||||||
 | 
							const parentRoomID = select("channel_room", "room_id", {channel_id: channelID}).pluck().get()
 | 
				
			||||||
		if (!parentRoomID) return // Not interested in a thread if we aren't interested in its wider channel
 | 
							if (!parentRoomID) return // Not interested in a thread if we aren't interested in its wider channel
 | 
				
			||||||
		const threadRoomID = await createRoom.syncRoom(thread.id) // Create room (will share the same inflight as the initial message to the thread)
 | 
							const threadRoomID = await createRoom.syncRoom(thread.id) // Create room (will share the same inflight as the initial message to the thread)
 | 
				
			||||||
		await announceThread.announceThread(parentRoomID, threadRoomID, thread)
 | 
							await announceThread.announceThread(parentRoomID, threadRoomID, thread)
 | 
				
			||||||
| 
						 | 
					@ -192,10 +199,10 @@ module.exports = {
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		/** @type {DiscordTypes.APIGuildChannel} */
 | 
					 | 
				
			||||||
		const channel = client.channels.get(message.channel_id)
 | 
							const channel = client.channels.get(message.channel_id)
 | 
				
			||||||
		if (!channel.guild_id) return // Nothing we can do in direct messages.
 | 
							if (!channel || !("guild_id" in channel) || !channel.guild_id) return // Nothing we can do in direct messages.
 | 
				
			||||||
		const guild = client.guilds.get(channel.guild_id)
 | 
							const guild = client.guilds.get(channel.guild_id)
 | 
				
			||||||
 | 
							assert(guild)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		await sendMessage.sendMessage(message, guild),
 | 
							await sendMessage.sendMessage(message, guild),
 | 
				
			||||||
		await discordCommandHandler.execute(message, channel, guild)
 | 
							await discordCommandHandler.execute(message, channel, guild)
 | 
				
			||||||
| 
						 | 
					@ -217,11 +224,12 @@ module.exports = {
 | 
				
			||||||
		// If the message content is a string then it includes all interesting fields and is meaningful.
 | 
							// If the message content is a string then it includes all interesting fields and is meaningful.
 | 
				
			||||||
		if (typeof data.content === "string") {
 | 
							if (typeof data.content === "string") {
 | 
				
			||||||
			/** @type {DiscordTypes.GatewayMessageCreateDispatchData} */
 | 
								/** @type {DiscordTypes.GatewayMessageCreateDispatchData} */
 | 
				
			||||||
 | 
								// @ts-ignore
 | 
				
			||||||
			const message = data
 | 
								const message = data
 | 
				
			||||||
			/** @type {DiscordTypes.APIGuildChannel} */
 | 
					 | 
				
			||||||
			const channel = client.channels.get(message.channel_id)
 | 
								const channel = client.channels.get(message.channel_id)
 | 
				
			||||||
			if (!channel.guild_id) return // Nothing we can do in direct messages.
 | 
								if (!channel || !("guild_id" in channel) || !channel.guild_id) return // Nothing we can do in direct messages.
 | 
				
			||||||
			const guild = client.guilds.get(channel.guild_id)
 | 
								const guild = client.guilds.get(channel.guild_id)
 | 
				
			||||||
 | 
								assert(guild)
 | 
				
			||||||
			await editMessage.editMessage(message, guild)
 | 
								await editMessage.editMessage(message, guild)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue