Add snowflake timestamp converter functions
This commit is contained in:
		
							parent
							
								
									8026cf0cad
								
							
						
					
					
						commit
						8439512f1a
					
				
					 4 changed files with 39 additions and 27 deletions
				
			
		| 
						 | 
					@ -3,32 +3,6 @@ const {messageToEvent} = require("./message-to-event")
 | 
				
			||||||
const data = require("../../test/data")
 | 
					const data = require("../../test/data")
 | 
				
			||||||
const Ty = require("../../types")
 | 
					const Ty = require("../../types")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * @param {string} roomID
 | 
					 | 
				
			||||||
 * @param {string} eventID
 | 
					 | 
				
			||||||
 * @returns {(roomID: string, eventID: string) => Promise<Ty.Event.Outer<Ty.Event.M_Room_Message>>}
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
function mockGetEvent(t, roomID_in, eventID_in, outer) {
 | 
					 | 
				
			||||||
	return async function(roomID, eventID) {
 | 
					 | 
				
			||||||
		t.equal(roomID, roomID_in)
 | 
					 | 
				
			||||||
		t.equal(eventID, eventID_in)
 | 
					 | 
				
			||||||
		return new Promise(resolve => {
 | 
					 | 
				
			||||||
			setTimeout(() => {
 | 
					 | 
				
			||||||
				resolve({
 | 
					 | 
				
			||||||
					event_id: eventID_in,
 | 
					 | 
				
			||||||
					room_id: roomID_in,
 | 
					 | 
				
			||||||
					origin_server_ts: 1680000000000,
 | 
					 | 
				
			||||||
					unsigned: {
 | 
					 | 
				
			||||||
						age: 2245,
 | 
					 | 
				
			||||||
						transaction_id: "$local.whatever"
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
					...outer
 | 
					 | 
				
			||||||
				})
 | 
					 | 
				
			||||||
			})
 | 
					 | 
				
			||||||
		})
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
test("message2event embeds: nothing but a field", async t => {
 | 
					test("message2event embeds: nothing but a field", async t => {
 | 
				
			||||||
	const events = await messageToEvent(data.message_with_embeds.nothing_but_a_field, data.guild.general, {})
 | 
						const events = await messageToEvent(data.message_with_embeds.nothing_but_a_field, data.guild.general, {})
 | 
				
			||||||
	t.deepEqual(events, [{
 | 
						t.deepEqual(events, [{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,6 +2,8 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const DiscordTypes = require("discord-api-types/v10")
 | 
					const DiscordTypes = require("discord-api-types/v10")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const EPOCH = 1420070400000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @param {string[]} userRoles
 | 
					 * @param {string[]} userRoles
 | 
				
			||||||
 * @param {DiscordTypes.APIGuild["roles"]} guildRoles
 | 
					 * @param {DiscordTypes.APIGuild["roles"]} guildRoles
 | 
				
			||||||
| 
						 | 
					@ -56,5 +58,17 @@ function isWebhookMessage(message) {
 | 
				
			||||||
	return message.webhook_id && !isInteractionResponse
 | 
						return message.webhook_id && !isInteractionResponse
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @param {string} snowflake */
 | 
				
			||||||
 | 
					function snowflakeToTimestampExact(snowflake) {
 | 
				
			||||||
 | 
						return Number(BigInt(snowflake) >> 22n) + EPOCH
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @param {number} timestamp */
 | 
				
			||||||
 | 
					function timestampToSnowflakeInexact(timestamp) {
 | 
				
			||||||
 | 
						return String((timestamp - EPOCH) * 2**22)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports.getPermissions = getPermissions
 | 
					module.exports.getPermissions = getPermissions
 | 
				
			||||||
module.exports.isWebhookMessage = isWebhookMessage
 | 
					module.exports.isWebhookMessage = isWebhookMessage
 | 
				
			||||||
 | 
					module.exports.snowflakeToTimestampExact = snowflakeToTimestampExact
 | 
				
			||||||
 | 
					module.exports.timestampToSnowflakeInexact = timestampToSnowflakeInexact
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										23
									
								
								discord/utils.test.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								discord/utils.test.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,23 @@
 | 
				
			||||||
 | 
					const {test} = require("supertape")
 | 
				
			||||||
 | 
					const data = require("../test/data")
 | 
				
			||||||
 | 
					const utils = require("./utils")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test("is webhook message: identifies bot interaction response as not a message", t => {
 | 
				
			||||||
 | 
						t.equal(utils.isWebhookMessage(data.interaction_message.thinking_interaction), false)
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test("is webhook message: identifies webhook interaction response as not a message", t => {
 | 
				
			||||||
 | 
						t.equal(utils.isWebhookMessage(data.interaction_message.thinking_interaction_without_bot_user), false)
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test("is webhook message: identifies webhook message as a message", t => {
 | 
				
			||||||
 | 
						t.equal(utils.isWebhookMessage(data.special_message.bridge_echo_webhook), true)
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test("discord utils: converts snowflake to timestamp", t => {
 | 
				
			||||||
 | 
						t.equal(utils.snowflakeToTimestampExact("86913608335773696"), 1440792219004)
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test("discerd utils: converts timestamp to snowflake", t => {
 | 
				
			||||||
 | 
						t.match(utils.timestampToSnowflakeInexact(1440792219004), /^869136083357.....$/)
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
| 
						 | 
					@ -2168,7 +2168,8 @@ test("event2message: guessed @mentions may join members to mention", async t =>
 | 
				
			||||||
	const subtext = {
 | 
						const subtext = {
 | 
				
			||||||
		user: {
 | 
							user: {
 | 
				
			||||||
			id: "321876634777218072",
 | 
								id: "321876634777218072",
 | 
				
			||||||
			username: "subtext",
 | 
								username: "subtextual",
 | 
				
			||||||
 | 
								global_name: "subtext",
 | 
				
			||||||
			discriminator: "0"
 | 
								discriminator: "0"
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue