MCPcopy Create free account
hub / github.com/ArrowM/Queue-Bot / insertJsMember

Function insertJsMember

src/utils/member.utils.ts:57–111  ·  view source on GitHub ↗
(options: {
		store: Store,
		queue: DbQueue,
		jsMember: GuildMember,
		message?: string,
		force?: boolean,
	})

Source from the content-addressed store, hash-verified

55 }
56
57 export async function insertJsMember(options: {
58 store: Store,
59 queue: DbQueue,
60 jsMember: GuildMember,
61 message?: string,
62 force?: boolean,
63 }) {
64 const { store, queue, jsMember, message, force } = options;
65
66 return await db.transaction(async () => {
67 if (!force) {
68 verifyMemberEligibility(store, queue, jsMember);
69 }
70
71 const priority = PriorityUtils.getMemberPriority(store, queue.id, jsMember);
72 const archivedMember = store.dbArchivedMembers().find(member => member.queueId === queue.id && member.userId === jsMember.id);
73 let positionTime = BigInt(Date.now());
74
75 if (queue.rejoinCooldownPeriod && archivedMember?.reason === ArchivedMemberReason.Pulled) {
76 const msSincePulled = BigInt(Date.now()) - archivedMember.archivedTime;
77 const msCooldownRemaining = BigInt(queue.rejoinCooldownPeriod * 1000) - msSincePulled;
78 if (msCooldownRemaining > 0) {
79 throw new CustomError({
80 message: "You are currently in a cooldown period and cannot rejoin the queue",
81 embeds: [
82 new EmbedBuilder()
83 .setDescription(`You can rejoin the queue in ${timeMention(Number(msCooldownRemaining / 1000n))}.`),
84 ],
85 });
86 }
87 }
88
89 if (queue.rejoinGracePeriod && archivedMember?.reason === ArchivedMemberReason.Left) {
90 if (BigInt(Date.now()) - archivedMember.archivedTime <= queue.rejoinGracePeriod) {
91 // Reuse the positionTime
92 positionTime = archivedMember.positionTime;
93 }
94 }
95
96 const insertedMember = store.insertMember({
97 guildId: store.guild.id,
98 queueId: queue.id,
99 userId: jsMember.id,
100 message,
101 priority,
102 positionTime,
103 });
104
105 await modifyMemberRoles(store, jsMember.id, queue.roleInQueueId, "add");
106
107 DisplayUtils.requestDisplayUpdate(store, queue.id);
108
109 return insertedMember;
110 });
111 }
112
113 export function updateMembers(store: Store, members: ArrayOrCollection<bigint, DbMember>, message: string) {
114 const updatedMembers = map(members, member => store.updateMember({ ...member, message }));

Callers 1

insertMentionablesFunction · 0.85

Calls 4

timeMentionFunction · 0.90
verifyMemberEligibilityFunction · 0.85
modifyMemberRolesFunction · 0.85
insertMemberMethod · 0.80

Tested by

no test coverage detected