110 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const DiscordTypes = require("discord-api-types/v10")
 | 
						|
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("discord utils: converts timestamp to snowflake", t => {
 | 
						|
	t.match(utils.timestampToSnowflakeInexact(1440792219004), /^869136083357.....$/)
 | 
						|
})
 | 
						|
 | 
						|
test("getPermissions: channel overwrite to allow role works", t => {
 | 
						|
	const guildRoles = [
 | 
						|
		{
 | 
						|
			version: 1695412489043,
 | 
						|
			unicode_emoji: null,
 | 
						|
			tags: {},
 | 
						|
			position: 0,
 | 
						|
			permissions: "559623605571137",
 | 
						|
			name: "@everyone",
 | 
						|
			mentionable: false,
 | 
						|
			managed: false,
 | 
						|
			id: "1154868424724463687",
 | 
						|
			icon: null,
 | 
						|
			hoist: false,
 | 
						|
			flags: 0,
 | 
						|
			color: 0
 | 
						|
		},
 | 
						|
		{
 | 
						|
			version: 1695412604262,
 | 
						|
			unicode_emoji: null,
 | 
						|
			tags: { bot_id: "466378653216014359" },
 | 
						|
			position: 1,
 | 
						|
			permissions: "536995904",
 | 
						|
			name: "PluralKit",
 | 
						|
			mentionable: false,
 | 
						|
			managed: true,
 | 
						|
			id: "1154868908336099444",
 | 
						|
			icon: null,
 | 
						|
			hoist: false,
 | 
						|
			flags: 0,
 | 
						|
			color: 0
 | 
						|
		},
 | 
						|
		{
 | 
						|
			version: 1698778936921,
 | 
						|
			unicode_emoji: null,
 | 
						|
			tags: {},
 | 
						|
			position: 1,
 | 
						|
			permissions: "536870912",
 | 
						|
			name: "web hookers",
 | 
						|
			mentionable: false,
 | 
						|
			managed: false,
 | 
						|
			id: "1168988246680801360",
 | 
						|
			icon: null,
 | 
						|
			hoist: false,
 | 
						|
			flags: 0,
 | 
						|
			color: 0
 | 
						|
		}
 | 
						|
	]
 | 
						|
	const userRoles = [ "1168988246680801360" ]
 | 
						|
	const userID = "684280192553844747"
 | 
						|
	const overwrites = [
 | 
						|
		{ type: 0, id: "1154868908336099444", deny: "0", allow: "1024" },
 | 
						|
		{ type: 0, id: "1154868424724463687", deny: "1024", allow: "0" },
 | 
						|
		{ type: 0, id: "1168988246680801360", deny: "0", allow: "1024" },
 | 
						|
		{ type: 1, id: "353373325575323648", deny: "0", allow: "1024" }
 | 
						|
	]
 | 
						|
	const permissions = utils.getPermissions(userRoles, guildRoles, userID, overwrites)
 | 
						|
	const want = BigInt(1 << 10 | 1 << 16)
 | 
						|
	t.equal((permissions & want), want)
 | 
						|
})
 | 
						|
 | 
						|
test("hasSomePermissions: detects the permission", t => {
 | 
						|
	const userPermissions = DiscordTypes.PermissionFlagsBits.MentionEveryone | DiscordTypes.PermissionFlagsBits.BanMembers
 | 
						|
	const canRemoveMembers = utils.hasSomePermissions(userPermissions, ["KickMembers", "BanMembers"])
 | 
						|
	t.equal(canRemoveMembers, true)
 | 
						|
})
 | 
						|
 | 
						|
test("hasSomePermissions: doesn't detect not the permission", t => {
 | 
						|
	const userPermissions = DiscordTypes.PermissionFlagsBits.MentionEveryone | DiscordTypes.PermissionFlagsBits.SendMessages
 | 
						|
	const canRemoveMembers = utils.hasSomePermissions(userPermissions, ["KickMembers", "BanMembers"])
 | 
						|
	t.equal(canRemoveMembers, false)
 | 
						|
})
 | 
						|
 | 
						|
test("hasAllPermissions: detects the permissions", t => {
 | 
						|
	const userPermissions = DiscordTypes.PermissionFlagsBits.KickMembers | DiscordTypes.PermissionFlagsBits.BanMembers | DiscordTypes.PermissionFlagsBits.MentionEveryone
 | 
						|
	const canRemoveMembers = utils.hasAllPermissions(userPermissions, ["KickMembers", "BanMembers"])
 | 
						|
	t.equal(canRemoveMembers, true)
 | 
						|
})
 | 
						|
 | 
						|
test("hasAllPermissions: doesn't detect not the permissions", t => {
 | 
						|
	const userPermissions = DiscordTypes.PermissionFlagsBits.MentionEveryone | DiscordTypes.PermissionFlagsBits.SendMessages | DiscordTypes.PermissionFlagsBits.KickMembers
 | 
						|
	const canRemoveMembers = utils.hasAllPermissions(userPermissions, ["KickMembers", "BanMembers"])
 | 
						|
	t.equal(canRemoveMembers, false)
 | 
						|
})
 |