Skip to content

Commit 27ea48a

Browse files
cleanup work #HSFDPMUW (#185)
* change links to bbn.music * change image link * change: cleanup * add: missing channel id in const * remove: unused function * Clarifies role usage with consistent IDs
1 parent b6e5ee0 commit 27ea48a

File tree

6 files changed

+15
-363
lines changed

6 files changed

+15
-363
lines changed

const.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
// Roles
22

3-
export const supportRole = "1120392307087261787" // Support role
43
export const ownerRoleID = "757969277063266407" // Owner role ID
4+
export const supportRoleID = "1120392307087261787" // Support role
5+
export const devRoleID = "815298088184446987" // Developer role ID
56

6-
export const supportRoles = [ ownerRoleID, "815298088184446987", supportRole ] // Owner, Dev, Support
7+
export const supportRoles = [ ownerRoleID, devRoleID, supportRoleID ] // Owner, Dev, Support
78

89
export const verified = "757983851032215673" // Verified role
910

@@ -15,7 +16,7 @@ export const secondLevelSupportCategoryID = "1120395441138315345" // Category ID
1516

1617
export const getStartedChannelID = "1081326643928375306" // Channel ID for getting started
1718
export const logChannelID = "757970455700439100" // Log channel ID for bot actions
18-
export const showCaseChannelID = "1147821355362963458"
19+
export const voiceLogChannelID = "757987983558181044" // Voice log channel ID for voice actions
1920

2021
// Categories
2122

db.ts

Lines changed: 0 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -102,15 +102,6 @@ export async function setLastDaily(discordId: string, lastDaily: number) {
102102
});
103103
}
104104

105-
export async function getServerURLs(discordId: string) {
106-
const user = await findUser(discordId);
107-
if (!user) return null;
108-
const servers = await db.collection("@bbn/hosting/servers").find({
109-
user
110-
}).toArray();
111-
return servers.map(server => server.identifier ? `https://panel.bbn.music/server/${server.identifier}` : `https://bbn.music/hosting?path=servers/${server._id}/`);
112-
}
113-
114105
export async function lastLogin(discordId: string) {
115106
const user = await findUser(discordId);
116107
if (!user) return null;
@@ -135,54 +126,6 @@ export async function saveTranscript(transcript: any) {
135126
await db.collection("@bbn/bot/transcripts").insertOne(transcript);
136127
}
137128

138-
export async function addPartner(member: ObjectId, cpu: number, memory: number, disk: number, slots: number, invite: string) {
139-
await db.collection("@bbn/bot/partners").insertOne({
140-
owner: member,
141-
cpu,
142-
memory,
143-
disk,
144-
slots,
145-
invite,
146-
lastinvite: Date.now()
147-
});
148-
await db.collection("@bbn/hosting/access").updateOne({
149-
owner: member
150-
}, {
151-
$inc: {
152-
"limits.memory": memory,
153-
"limits.disk": disk,
154-
"limits.cpu": cpu,
155-
"limits.slots": slots
156-
}
157-
});
158-
}
159-
160-
export async function removePartner(member: ObjectId) {
161-
const partner = await db.collection("@bbn/bot/partners").findOne({
162-
owner: member
163-
});
164-
if (!partner) return null;
165-
db.collection("@bbn/hosting/access").updateOne({
166-
owner: member
167-
}, {
168-
$inc: {
169-
"limits.memory": -partner.memory,
170-
"limits.disk": -partner.disk,
171-
"limits.cpu": -partner.cpu,
172-
"limits.slots": -partner.slots
173-
174-
}
175-
});
176-
db.collection("@bbn/bot/partners").deleteOne({
177-
owner: member
178-
});
179-
}
180-
181-
export function getPartnerFromInvite(invite: string) {
182-
return db.collection("@bbn/bot/partners").findOne({
183-
invite
184-
});
185-
}
186129
export function getMemberFromBBNId(bbnid: ObjectId) {
187130
return db.collection("users").findOne({
188131
_id: bbnid
@@ -198,7 +141,3 @@ export function updateLastInvite(member: ObjectId) {
198141
}
199142
})
200143
}
201-
202-
export function getPartners() {
203-
return db.collection("@bbn/bot/partners").find().toArray();
204-
}

helper.ts

Lines changed: 2 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Client, TextChannel, GuildBan, GuildMember, PartialGuildMember, User, Message, VoiceState, EmbedBuilder, GuildTextBasedChannel } from 'npm:discord.js'
2-
import { logChannelID, showCaseChannelID } from './const.ts';
2+
import { logChannelID, voiceLogChannelID } from './const.ts';
33

44
export function sendBanMessage(ban: GuildBan, banned: boolean) {
55
ban.client.channels.fetch(logChannelID).then(channel => {
@@ -31,46 +31,6 @@ export function sendPrivateMessage(message: Message, client: Client) {
3131
}
3232
}
3333

34-
export async function handleShowcaseMessage(message: Message) {
35-
if (message.channel.id !== showCaseChannelID || message.author.bot) return;
36-
const domainPattern = /(?:https?:\/\/)?(?:www\.)?([a-zA-Z0-9.-]+(?:\.[a-zA-Z]{2,}))(?::([0-9]+))?/g;
37-
const match = Array.from(message.content.matchAll(domainPattern));
38-
39-
if (match.length === 1) {
40-
const userDomain = match[ 0 ][ 1 ];
41-
42-
if (!Deno.env.get("BBN_DOMAINS")!.split(",").includes(userDomain)) {
43-
const userIp = (await resolve([ userDomain ]))[ 0 ];
44-
const bbnIps = await resolve(Deno.env.get("BBN_DOMAINS")!.split(','));
45-
if (!bbnIps.includes(userIp)) {
46-
replyAndDelete(message, `Your server \`${userDomain}\` is not hosted by BBN. Please use a BBN domain.`);
47-
return;
48-
}
49-
}
50-
message.react('✅');
51-
return;
52-
}
53-
replyAndDelete(message, `Your message does not contain a valid domain or contains multiple domains. Please only send one domain.`);
54-
return;
55-
}
56-
57-
async function replyAndDelete(message: Message, content: string) {
58-
await message.reply(content).then(reply => setTimeout(() => reply.delete(), 10000));
59-
message.delete();
60-
}
61-
62-
export function resolve(domains: string[]) {
63-
return new Promise<string[]>((resolve, reject) => {
64-
const resolved: string[] = [];
65-
domains.forEach(domain => {
66-
Deno.resolveDns(domain, "A").then(res => {
67-
resolved.push(res[ 0 ]);
68-
if (resolved.length === domains.length) resolve(resolved);
69-
}).catch(err => reject(err));
70-
})
71-
resolve(resolved);
72-
})
73-
}
7434

7535
export function sendVoice(oldState: VoiceState, newState: VoiceState) {
7636
if (!oldState.channel && newState.channel) {
@@ -103,7 +63,7 @@ export function sendVoice(oldState: VoiceState, newState: VoiceState) {
10363
}
10464

10565
function sendVoiceMessage(embed: EmbedBuilder, newState: VoiceState) {
106-
newState.guild.channels.fetch(Deno.env.get("VOICE_LOG_CHANNEL")!).then(channel => (channel as TextChannel).send({ embeds: [ embed ] }))
66+
newState.guild.channels.fetch(voiceLogChannelID).then(channel => (channel as TextChannel).send({ embeds: [ embed ] }))
10767
}
10868

10969
function generateVoiceEmbed(word: string, negative: boolean, newState: VoiceState, oldState: VoiceState) {

interactions.ts

Lines changed: 7 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { ActionRowBuilder, ButtonBuilder, ButtonInteraction, ButtonStyle, ChannelType, EmbedBuilder, GuildMember, GuildMemberRoleManager, Interaction, Message, MessageFlags, ModalBuilder, PermissionsBitField, TextChannel, TextInputBuilder, TextInputStyle, User, UserSelectMenuBuilder, VoiceChannel } from "npm:discord.js"
2-
import { saveTranscript, findUser, lastLogin, getServerURLs, getLastDaily, addCoins, setLastDaily, getCoins, removeCoins, addPartner, removePartner, getPartners, getMemberFromBBNId } from "./db.ts";
3-
import { createTicketChannelID, firstLevelSupportCategoryID, getStartedChannelID, ownerRoleID, secondLevelSupportCategoryID, supportRole, supportRoles, verified } from "./const.ts";
2+
import { saveTranscript, findUser, lastLogin, getLastDaily, addCoins, setLastDaily, getCoins, removeCoins } from "./db.ts";
3+
import { createTicketChannelID, firstLevelSupportCategoryID, ownerRoleID, secondLevelSupportCategoryID, supportRoleID, supportRoles, verified } from "./const.ts";
44

55
export async function handleInteraction(interaction: Interaction) {
66
if (interaction.isButton()) {
@@ -123,9 +123,6 @@ export async function handleInteraction(interaction: Interaction) {
123123
embed.addFields({
124124
name: `User ID:`,
125125
value: `> ${dbuser.toHexString()}`,
126-
}, {
127-
name: `Server URLs:`,
128-
value: `> ${await getServerURLs(interaction.user.id)}`,
129126
}, {
130127
name: `Last Login:`,
131128
value: `\`\`\`${JSON.stringify(login[ 0 ] ?? "none")}\`\`\``,
@@ -148,7 +145,7 @@ export async function handleInteraction(interaction: Interaction) {
148145
"ViewChannel": true
149146
});
150147
await possibleChannel.send({
151-
content: `${interaction.member} || <@&${supportRole}>`,
148+
content: `${interaction.member} || <@&${supportRoleID}>`,
152149
embeds: [ embed ],
153150
components: [ btnrow ],
154151
});
@@ -172,7 +169,7 @@ export async function handleInteraction(interaction: Interaction) {
172169
}, 5000);
173170

174171
await ch.send({
175-
content: `${interaction.member} || <@&${supportRole}>`,
172+
content: `${interaction.member} || <@&${supportRoleID}>`,
176173
embeds: [ embed ],
177174
components: [ btnrow ],
178175
});
@@ -283,8 +280,8 @@ export async function handleInteraction(interaction: Interaction) {
283280
reason: "Ticket deescalated",
284281
});
285282
interaction.reply({
286-
allowedMentions: { roles: [ supportRole ] },
287-
content: `Ticket deescalated. || <@&${supportRole}>`
283+
allowedMentions: { roles: [ supportRoleID ] },
284+
content: `Ticket deescalated. || <@&${supportRoleID}>`
288285
});
289286
}
290287

@@ -307,7 +304,7 @@ export async function handleInteraction(interaction: Interaction) {
307304
}
308305

309306
let reward = 10 + (Math.floor(Math.random() * 10));
310-
if ((await interaction.guild!.members.fetch(interaction.user.id)).premiumSince || (await interaction.guild!.members.fetch(interaction.user.id)).roles.cache.has(supportRole))
307+
if ((await interaction.guild!.members.fetch(interaction.user.id)).premiumSince || (await interaction.guild!.members.fetch(interaction.user.id)).roles.cache.has(supportRoleID))
311308
reward *= 10;
312309
const res = await addCoins(interaction.user.id, reward);
313310
if (res === null) {
@@ -368,103 +365,6 @@ export async function handleInteraction(interaction: Interaction) {
368365
interaction.reply(`Removed ${coins} coins from ${user.username}'s balance.`);
369366
}
370367

371-
if (interaction.commandName == "addpartner") {
372-
if (!interaction.memberPermissions?.has(PermissionsBitField.Flags.Administrator)) {
373-
interaction.reply("You do not have permission to add partners.");
374-
return;
375-
}
376-
377-
const user = interaction.options.getMentionable("user", true) as User;
378-
const dbmember = await findUser(user.id);
379-
if (!dbmember) {
380-
interaction.reply("We couldn't find an bbn account in our database");
381-
return;
382-
}
383-
384-
const cpu = interaction.options.getInteger("cpu", true);
385-
const ram = interaction.options.getInteger("ram", true);
386-
const storage = interaction.options.getInteger("storage", true);
387-
const slots = interaction.options.getInteger("slots", true);
388-
const invite = await interaction.guild?.invites.create(getStartedChannelID, {
389-
maxAge: 0,
390-
unique: true,
391-
reason: "Partner invite",
392-
});
393-
if (!invite) {
394-
interaction.reply("We couldn't create an invite for the partner");
395-
return;
396-
}
397-
addPartner(dbmember, cpu, ram, storage, slots, invite.code);
398-
interaction.reply(`Added ${user.username} as a partner.\n\nFollowing resources got added: \nCPU: ${cpu} \nMemory: ${ram} \nStorage: ${storage} \nSlots: ${slots} \nInvite code: https://discord.gg/${invite.code}`);
399-
}
400-
401-
if (interaction.commandName == "removepartner") {
402-
if (!interaction.memberPermissions?.has(PermissionsBitField.Flags.Administrator)) {
403-
interaction.reply("You do not have permission to remove partners.");
404-
return;
405-
}
406-
const user = interaction.options.getMentionable("user", true) as User;
407-
const dbmember = await findUser(user.id);
408-
if (!dbmember) {
409-
interaction.reply("We couldn't find an bbn account in our database");
410-
return;
411-
}
412-
removePartner(dbmember);
413-
interaction.reply(`Removed ${user.username} as a partner.`);
414-
}
415-
416-
if (interaction.commandName == "partners") {
417-
if (!interaction.memberPermissions?.has(PermissionsBitField.Flags.Administrator)) {
418-
interaction.reply("You do not have permission to list partners.");
419-
return;
420-
}
421-
let out = "Owner - CPU, RAM, Storage, Slots, Invitecode, last invite, uses\n";
422-
const partners = await getPartners();
423-
424-
await interaction.deferReply();
425-
426-
out += (await Promise.all(partners.map(async partner =>
427-
`<@${await getMemberFromBBNId(partner.owner)}> \`${partner.owner}\` - \`${partner.cpu}\` \`${partner.memory}\` \`${partner.disk}\` \`${partner.slots}\` \`${partner.invite}\` <t:${Math.round(partner.lastinvite / 1000)}:R> \`${(await interaction.guild?.invites.fetch(partner.invite)!).uses}\``))).join("\n");
428-
429-
const embed = new EmbedBuilder()
430-
.setTitle(`Partners`)
431-
.setDescription(out)
432-
interaction.editReply({ embeds: [ embed ] });
433-
}
434-
435-
if (interaction.commandName == "servers") {
436-
if (interaction.member) {
437-
if (interaction.member.roles instanceof GuildMemberRoleManager) {
438-
if (!Array.from(interaction.member.roles.cache.keys()).some(role => supportRoles.includes(role))) {
439-
interaction.reply("You do not have permission to list servers.");
440-
return;
441-
}
442-
} else {
443-
if (!interaction.member.roles.some(role => supportRoles.includes(role))) {
444-
interaction.reply("You do not have permission to list servers.");
445-
return;
446-
447-
}
448-
}
449-
}
450-
const possiblemember = interaction.options.getMentionable("user", true);
451-
if (!possiblemember) {
452-
interaction.reply("Please mention a user.");
453-
return;
454-
}
455-
const member = possiblemember as GuildMember;
456-
const servers = await getServerURLs(member.id);
457-
if (servers === null) {
458-
interaction.reply("No account found for this user.");
459-
return;
460-
}
461-
if (servers.length === 0) {
462-
interaction.reply("This user has no servers.");
463-
return;
464-
}
465-
interaction.reply(`Servers of ${member.user.username}:\n${servers.map(server => `<${server}>`).join("\n")}`);
466-
}
467-
468368
if (interaction.commandName === "steam") {
469369
const access_token = interaction.options.getString("accesstoken");
470370
if (!access_token) {

0 commit comments

Comments
 (0)