deletion done
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import {
|
||||
type CommandInteraction,
|
||||
SlashCommandBuilder, EmbedBuilder, type GuildMember
|
||||
SlashCommandBuilder, EmbedBuilder, type GuildMember, PermissionsBitField
|
||||
} from 'discord.js'
|
||||
import { getMemberPermissionsRaw } from '../db'
|
||||
|
||||
@@ -10,16 +10,16 @@ module.exports = {
|
||||
.addUserOption((option) =>
|
||||
option
|
||||
.setName('user')
|
||||
.setDescription('The user to check the roles of')
|
||||
.setDescription('The user to check the permissions of')
|
||||
.setRequired(false))
|
||||
.setDescription('Check permission of an user for goobot'),
|
||||
.setDescription('Check permission of an user'),
|
||||
async execute (interaction: CommandInteraction) {
|
||||
if (interaction.guild === null) {
|
||||
void interaction.reply({ content: 'I am sorry dave, I cannot do that\nCommand not available outside of guilds', ephemeral: true })
|
||||
void interaction.reply({ content: 'I am sorry dave, I\'m afraid I cannot do that\nCommand not available outside of guilds', ephemeral: true })
|
||||
return
|
||||
}
|
||||
let member = interaction.member as GuildMember | null
|
||||
if (interaction.options.get('user') !== undefined) member = interaction.options.getMember('user') as GuildMember | null
|
||||
if (interaction.options.get('user') !== null) member = interaction.options.getMember('user') as GuildMember | null
|
||||
|
||||
if (member === null) {
|
||||
void interaction.reply({ content: 'Can`t find member', ephemeral: true })
|
||||
@@ -35,7 +35,8 @@ module.exports = {
|
||||
{ name: 'User', value: `<@${member.id}>` },
|
||||
{ name: 'Can add goobs', value: `${permissions.create > 0 ? '🟩' : '🟥'} (${permissions.create})`, inline: true },
|
||||
{ name: 'Can delete goobs', value: `${permissions.delete > 0 ? '🟩' : '🟥'} (${permissions.delete})`, inline: true },
|
||||
{ name: 'Can read goobs', value: `${permissions.read > 0 ? '🟩' : '🟥'} (${permissions.read})`, inline: true }
|
||||
{ name: 'Can read goobs', value: `${permissions.read > 0 ? '🟩' : '🟥'} (${permissions.read})`, inline: true },
|
||||
{ name: 'Can edit settings', value: `${(member.permissions?.has(PermissionsBitField.Flags.ManageRoles, true)) ? '🟩' : '🟥'}`, inline: true }
|
||||
)
|
||||
|
||||
await interaction.reply({ embeds: [statusUpdate], ephemeral: true })
|
||||
|
||||
@@ -7,15 +7,15 @@ import { execute, type PermsNumbers } from '../db'
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('checkroles')
|
||||
.setDescription('Prints all roles permissions'),
|
||||
.setDescription('Prints all roles in the database'),
|
||||
async execute (interaction: CommandInteraction) {
|
||||
if (interaction.guild === null) {
|
||||
void interaction.reply({ content: 'I am sorry dave, I cannot do that\nCommand not available outside of guilds', ephemeral: true })
|
||||
void interaction.reply({ content: 'I am sorry dave, I\'m afraid I cannot do that\nCommand not available outside of guilds', ephemeral: true })
|
||||
return
|
||||
}
|
||||
|
||||
if ((interaction.memberPermissions?.has(PermissionsBitField.Flags.ManageRoles, true)) !== true) {
|
||||
await interaction.reply({ content: 'I am sorry dave, I cannot do that\nYou don\'t have the permission to manage roles on this server', ephemeral: true })
|
||||
await interaction.reply({ content: 'I am sorry dave, I\'m afraid I cannot do that\nYou don\'t have the permission to manage roles on this server', ephemeral: true })
|
||||
return
|
||||
}
|
||||
|
||||
@@ -26,14 +26,15 @@ module.exports = {
|
||||
.setTitle('List of roles')
|
||||
.setTimestamp()
|
||||
|
||||
permissionList.forEach(e => {
|
||||
await Promise.all(permissionList.map(async e => {
|
||||
statusUpdate.addFields(
|
||||
{ name: 'Role', value: `<@&${e.role.toString()}>` },
|
||||
{ name: 'Can add goobs', value: `${e.create > 0 ? '🟩' : '🟥'} (${e.create})`, inline: true },
|
||||
{ name: 'Can delete goobs', value: `${e.delete > 0 ? '🟩' : '🟥'} (${e.delete})`, inline: true },
|
||||
{ name: 'Can read goobs', value: `${e.read > 0 ? '🟩' : '🟥'} (${e.read})`, inline: true }
|
||||
{ name: 'Can read goobs', value: `${e.read > 0 ? '🟩' : '🟥'} (${e.read})`, inline: true },
|
||||
{ name: 'Can edit settings', value: `${((await ((await interaction.client.guilds.fetch(e.guild)).roles.fetch(e.role)))?.permissions.has(PermissionsBitField.Flags.ManageRoles, true) ?? false) ? '🟩' : '🟥'}`, inline: true }
|
||||
)
|
||||
})
|
||||
}))
|
||||
await interaction.reply({ embeds: [statusUpdate], ephemeral: true })
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
import {
|
||||
type CommandInteraction,
|
||||
SlashCommandBuilder,
|
||||
type GuildMember
|
||||
} from 'discord.js'
|
||||
import { checkMemberPermissions, insertGoob } from '../db'
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('forceload')
|
||||
.setDescription('Add a message in and its attachements to the database')
|
||||
.addStringOption((option) =>
|
||||
option
|
||||
.setName('messageid')
|
||||
.setDescription('The id of the message in the current channel to add the goobs from')
|
||||
.setRequired(true)
|
||||
),
|
||||
async execute (interaction: CommandInteraction) {
|
||||
if (interaction.guild === null) {
|
||||
void interaction.reply({ content: 'I am sorry dave, I cannot do that\nCommand not available outside of guilds', ephemeral: true })
|
||||
return
|
||||
}
|
||||
const member = interaction.member
|
||||
if (member === null) {
|
||||
void interaction.reply({ content: 'Something went wrong : cannot find member', ephemeral: true })
|
||||
return
|
||||
}
|
||||
|
||||
if (!(await checkMemberPermissions(member as GuildMember)).delete) {
|
||||
await interaction.reply({ content: "I am sorry dave, I cannot do that\nYou don't have the permission to manage roles on this server. You muse have the **delete** permission", ephemeral: true })
|
||||
return
|
||||
}
|
||||
const messageId = interaction.options.get('messageid')?.value
|
||||
if (messageId === undefined) {
|
||||
void interaction.reply({ content: 'Something went wrong : messageid null', ephemeral: true })
|
||||
return
|
||||
}
|
||||
const message = await interaction.channel?.messages.fetch(messageId.toString())
|
||||
if (message === undefined) {
|
||||
return
|
||||
}
|
||||
insertGoob(message)
|
||||
await interaction.reply({ content: 'Goober inserted', ephemeral: true })
|
||||
}
|
||||
}
|
||||
+23
-8
@@ -1,8 +1,8 @@
|
||||
import {
|
||||
type CommandInteraction,
|
||||
SlashCommandBuilder, EmbedBuilder, type Message, ButtonStyle, ButtonBuilder, ActionRowBuilder, ComponentType
|
||||
SlashCommandBuilder, EmbedBuilder, type Message, ButtonStyle, ButtonBuilder, ActionRowBuilder, ComponentType, type GuildMember
|
||||
} from 'discord.js'
|
||||
import { execute } from '../db'
|
||||
import { checkMemberPermissions, deleteGoob, execute } from '../db'
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
@@ -10,13 +10,22 @@ module.exports = {
|
||||
.setDescription('meow').addIntegerOption(option =>
|
||||
option
|
||||
.setName('gooberid')
|
||||
.setDescription('The goob to see')
|
||||
.setDescription('The ID of the goob to see')
|
||||
.setRequired(false)),
|
||||
async execute (interaction: CommandInteraction) {
|
||||
// Pick the right goober
|
||||
const member = interaction.member
|
||||
if (member === null) {
|
||||
void interaction.reply({ content: 'Something went wrong : cannot find member', ephemeral: true })
|
||||
return
|
||||
}
|
||||
if (!(await checkMemberPermissions(member as GuildMember)).read) {
|
||||
void interaction.reply({ content: 'I am sorry dave, I\'m afraid I cannot do that\nYou do not have access to that command', ephemeral: true })
|
||||
return
|
||||
}
|
||||
const amountOfGoobs = (await execute('SELECT COUNT(*) as totalweight from goob'))[0].totalweight
|
||||
let number = Number(interaction.options.get('gooberid')?.value)
|
||||
let targetImage
|
||||
let targetImage: { guild: string, channel: string, messageid: string, url: string, id: number }
|
||||
if (!Number.isNaN(number)) {
|
||||
targetImage = (await execute('SELECT * from goob WHERE id = $messageid', { $messageid: number }))[0]
|
||||
} else {
|
||||
@@ -40,7 +49,7 @@ module.exports = {
|
||||
|
||||
let exampleEmbed = new EmbedBuilder()
|
||||
.setColor(0x0099FF)
|
||||
.setTitle(`Goob #${targetImage.id as number}`)
|
||||
.setTitle(`Goob #${targetImage.id}`)
|
||||
.setURL(message?.url ?? targetImage.url)
|
||||
.setTimestamp(message?.createdTimestamp ?? undefined)
|
||||
.setAuthor({ name: message?.author.username ?? 'deleted message', iconURL: message?.author.avatarURL() ?? undefined, url: message?.url })
|
||||
@@ -65,9 +74,15 @@ module.exports = {
|
||||
const collector = response.createMessageComponentCollector({ componentType: ComponentType.Button, time: 3_600_00 })
|
||||
|
||||
collector.on('collect', async i => {
|
||||
const roles = (await execute('SELECT * from permissions WHERE guild = $guild', { $guild: i.guild?.id }))
|
||||
console.log(roles)
|
||||
console.log(i.member?.roles)
|
||||
if (i.member === null) {
|
||||
void i.reply({ content: 'Something went wrong : cannot find member', ephemeral: true })
|
||||
return
|
||||
}
|
||||
if (!(await checkMemberPermissions(i.member as GuildMember)).delete) {
|
||||
return
|
||||
}
|
||||
void deleteGoob(targetImage, interaction.client)
|
||||
void interaction.deleteReply()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
+4
-30
@@ -4,45 +4,19 @@ import {
|
||||
type Message
|
||||
} from 'discord.js'
|
||||
import { owner_id } from '../config.json'
|
||||
import db, { checkMemberPermissions } from '../db'
|
||||
|
||||
function insertGoob (message: Message): number {
|
||||
const attachments = message.attachments.filter(
|
||||
(e) =>
|
||||
e.contentType !== null &&
|
||||
(e.contentType?.startsWith('image') || e.contentType?.startsWith('video'))
|
||||
)
|
||||
|
||||
const embeds = message.embeds.filter((e) => e.image !== undefined || e.video !== undefined)
|
||||
|
||||
attachments.forEach(a => db.run('INSERT INTO goob (messageid, guild, channel, url) VALUES ($messageid, $guild, $channel, $url)', {
|
||||
$messageid: message.id,
|
||||
$guild: message.guildId,
|
||||
$channel: message.channelId,
|
||||
$url: a.url
|
||||
}))
|
||||
|
||||
embeds.forEach(e => db.run('INSERT INTO goob (messageid, guild, channel, url) VALUES ($messageid, $guild, $channel, $url)', {
|
||||
$messageid: message.id,
|
||||
$guild: message.guildId,
|
||||
$channel: message.channelId,
|
||||
$url: e.video !== undefined ? e.video?.url : e.image?.url
|
||||
}))
|
||||
|
||||
if (attachments.size > 0 || embeds.length > 0) void message.react('📥')
|
||||
return attachments.size + embeds.length
|
||||
}
|
||||
import db, { checkMemberPermissions, insertGoob } from '../db'
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('load')
|
||||
.setDescription('Sync data for '),
|
||||
.setDescription('Synchronise all past and future goobers from this channel'),
|
||||
async execute (interaction: CommandInteraction) {
|
||||
if (interaction.user.id !== owner_id) {
|
||||
await interaction.reply({
|
||||
content: 'You do not have access to this command!',
|
||||
ephemeral: true
|
||||
})
|
||||
return
|
||||
}
|
||||
if (
|
||||
interaction.channel?.isDMBased() === true ||
|
||||
@@ -79,7 +53,7 @@ module.exports = {
|
||||
while (messages !== undefined && messages.size > 0) {
|
||||
const permissionFilter = await Promise.all((messages as unknown as Message[]).map(async e => {
|
||||
if (e.member === null) throw new Error('member is null')
|
||||
return (await checkMemberPermissions(e.member)).create
|
||||
return (await checkMemberPermissions(e.member)).create && e.reactions.resolve('🚫') === null
|
||||
}))
|
||||
|
||||
const filteredMessages = (messages as unknown as Message[]).map(e => e).filter((e, i) => permissionFilter[i] && !e.author.bot)
|
||||
|
||||
@@ -38,7 +38,7 @@ module.exports = {
|
||||
return
|
||||
}
|
||||
if ((interaction.memberPermissions?.has(PermissionsBitField.Flags.ManageRoles, true)) !== true) {
|
||||
void interaction.reply({ content: 'I am sorry dave, I cannot do that\nYou don\'t have the permission to manage roles on this server', ephemeral: true })
|
||||
void interaction.reply({ content: 'I am sorry dave, I\'m afraid I cannot do that\nYou don\'t have the permission to manage roles on this server', ephemeral: true })
|
||||
return
|
||||
}
|
||||
// Set Role
|
||||
|
||||
+42
-1
@@ -1,4 +1,4 @@
|
||||
import { Guild, type GuildMember } from 'discord.js'
|
||||
import { type Message, type Client, type GuildMember } from 'discord.js'
|
||||
import { verbose } from 'sqlite3'
|
||||
const sqlite = verbose()
|
||||
const db = new sqlite.Database('goobers.db')
|
||||
@@ -46,4 +46,45 @@ export async function checkMemberPermissions (member: GuildMember): Promise<Perm
|
||||
delete: userPerms.read > 0
|
||||
}
|
||||
}
|
||||
|
||||
export function insertGoob (message: Message): number {
|
||||
const attachments = message.attachments.filter(
|
||||
(e) =>
|
||||
e.contentType !== null &&
|
||||
(e.contentType?.startsWith('image') || e.contentType?.startsWith('video'))
|
||||
)
|
||||
|
||||
const embeds = message.embeds.filter((e) => e.image !== undefined || e.video !== undefined)
|
||||
|
||||
attachments.forEach(a => db.run('INSERT INTO goob (messageid, guild, channel, url) VALUES ($messageid, $guild, $channel, $url)', {
|
||||
$messageid: message.id,
|
||||
$guild: message.guildId,
|
||||
$channel: message.channelId,
|
||||
$url: a.url
|
||||
}))
|
||||
|
||||
embeds.forEach(e => db.run('INSERT INTO goob (messageid, guild, channel, url) VALUES ($messageid, $guild, $channel, $url)', {
|
||||
$messageid: message.id,
|
||||
$guild: message.guildId,
|
||||
$channel: message.channelId,
|
||||
$url: e.video !== undefined ? e.video?.url : e.image?.url
|
||||
}))
|
||||
|
||||
if (attachments.size > 0 || embeds.length > 0) void message.react('📥')
|
||||
return attachments.size + embeds.length
|
||||
}
|
||||
|
||||
export async function deleteGoob (targetimage: { guild: string, channel: string, messageid: string, url: string, id: number }, client: Client): Promise<void> {
|
||||
await execute('DELETE FROM goob WHERE id=$id', { $id: targetimage.id })
|
||||
const messageGuild = await client.guilds.fetch(targetimage.guild)
|
||||
const messageChannel = await messageGuild.channels.fetch(targetimage.channel)
|
||||
let message = undefined as Message | undefined
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
|
||||
if (messageChannel?.isTextBased()) {
|
||||
message = await messageChannel.messages.fetch(targetimage.messageid).catch(() => undefined)
|
||||
}
|
||||
if (message === undefined) return
|
||||
await message.react('🚫')
|
||||
}
|
||||
export default db
|
||||
|
||||
Reference in New Issue
Block a user