diff --git a/server/bot/commands/admin.ts b/server/bot/commands/admin.ts index 8afdea7..be54065 100644 --- a/server/bot/commands/admin.ts +++ b/server/bot/commands/admin.ts @@ -1 +1,73 @@ +import { IveBotCommand } from '../imports/types' +import { getInsult, getUser } from '../imports/tools' +import { checkRolePosition } from '../imports/permissions' export { handleWarn } from './admin/warn' +export { handleBan } from './admin/ban' + +export const handlePurge: IveBotCommand = (client) => ({ + name: 'purge', + opts: { + description: 'Bulk delete a set of messages.', + fullDescription: 'Bulk delete messages newer than 2 weeks.', + usage: '/purge ', + guildOnly: true, + requirements: { permissions: { 'manageMessages': true } }, + permissionMessage: `**Thankfully, you don't have enough permissions for that, you ${getInsult()}.**` + }, + generator: (message, args) => { + // Check if usage is correct. + if ( + isNaN(+args[0]) || args.length !== 1 || +args[0] === 0 + ) { return 'Correct usage: /purge ' } + // Get the list of messages. + client.getMessages(message.channel.id, +args[0], message.id).then((res) => { + res.push(message) + client.deleteMessages(message.channel.id, res.map(i => i.id), 'Purge').catch(() => { + client.createMessage( + message.channel.id, 'Could not delete messages. Are the messages older than 2 weeks?' + ) + }) + }).catch(() => client.createMessage(message.channel.id, 'Could not retrieve messages.')) + } +}) + +export const handleKick: IveBotCommand = (client) => ({ + name: 'kick', + opts: { + description: 'Kick someone.', + fullDescription: 'Kick someone.', + usage: '/kick (reason)', + guildOnly: true, + requirements: { permissions: { 'kickMembers': true } }, + permissionMessage: `**Thankfully, you don't have enough permissions for that, you ${getInsult()}.**` + }, + generator: (message, args) => { + // Find the user ID. + let user = getUser(message, args.shift()) + if (!user) return `Specify a valid member of this guild, ${getInsult()}.` + // If the user cannot kick the person.. + if ( + checkRolePosition(message.member.guild.members.find(i => i.user === user)) >= + checkRolePosition(message.member) + ) { + return `You cannot kick this person, you ${getInsult()}.` + } + // Now we kick the person. + client.kickGuildMember(message.member.guild.id, user.id, args.join(' ')).then(() => { + client.createMessage( + message.channel.id, `**${user.username}#${user.discriminator}** has been kicked. **rip.**` + ) + client.getDMChannel(user.id).then((c) => client.createMessage(c.id, args.length !== 0 + ? `You have been kicked from ${message.member.guild.name} for ${args.join(' ')}.` + : `You have been kicked from ${message.member.guild.name}.` + )) + // WeChill + if (message.member.guild.id === '402423671551164416') { + client.createMessage('402437089557217290', args.length !== 0 + ? `**${user.username}#${user.discriminator}** has been kicked for **${args.join(' ')}**.` + : `**${user.username}#${user.discriminator}** has been kicked for not staying chill >:L ` + ) + } + }) + } +}) diff --git a/server/bot/commands/admin/ban.ts b/server/bot/commands/admin/ban.ts new file mode 100644 index 0000000..024a76b --- /dev/null +++ b/server/bot/commands/admin/ban.ts @@ -0,0 +1,45 @@ +import { IveBotCommand } from '../../imports/types' +import { checkRolePosition } from '../../imports/permissions' +import { getInsult, getUser } from '../../imports/tools' + +export const handleBan: IveBotCommand = (client) => ({ + name: 'ban', + opts: { + description: 'Ban someone.', + fullDescription: 'Ban someone.', + usage: '/ban (reason)', + aliases: ['banana', 'nuke'], + guildOnly: true, + requirements: { permissions: { 'banMembers': true } }, + permissionMessage: `**Thankfully, you don't have enough permissions for that, you ${getInsult()}.**` + }, + generator: (message, args) => { + // Find the user ID. + let user = getUser(message, args.shift()) + if (!user) return `Specify a valid member of this guild, ${getInsult()}.` + // If the user cannot ban the person.. + if ( + checkRolePosition(message.member.guild.members.find(i => i.user === user)) >= + checkRolePosition(message.member) + ) { + return `You cannot ban this person, you ${getInsult()}.` + } + // Now we ban the person. + client.banGuildMember(message.member.guild.id, user.id, 0, args.join(' ')).then(() => { + client.createMessage( + message.channel.id, `**${user.username}#${user.discriminator}** has been banned. **rip.**` + ) + client.getDMChannel(user.id).then((c) => client.createMessage(c.id, args.length !== 0 + ? `You have been banned from ${message.member.guild.name} for ${args.join(' ')}.` + : `You have been banned from ${message.member.guild.name}.` + )) + // WeChill + if (message.member.guild.id === '402423671551164416') { + client.createMessage('402437089557217290', args.length !== 0 + ? `**${user.username}#${user.discriminator}** has been banned for **${args.join(' ')}**.` + : `**${user.username}#${user.discriminator}** has been banned for not staying chill >:L ` + ) + } + }) + } +}) diff --git a/server/bot/commands/admin/warn.ts b/server/bot/commands/admin/warn.ts index a8ed5f2..9be0811 100644 --- a/server/bot/commands/admin/warn.ts +++ b/server/bot/commands/admin/warn.ts @@ -9,14 +9,13 @@ export const handleWarn: IveBotCommand = ({ createMessage, getDMChannel }, tempD description: 'Warn someone.', fullDescription: 'Warn someone.', usage: '/warn ', - guildOnly: true + guildOnly: true, + requirements: { permissions: { 'manageMessages': true } }, + permissionMessage: `**Thankfully, you don't have enough permissions for that, you ${getInsult()}.**` }, generator: (message, args) => { - // Check user for permissions. - if (!message.member.permission.has('manageMessages')) { - return `**Thankfully, you don't have enough permissions for that, you ${getInsult()}.**` - // Or if improper arguments were provided, then we must inform the user. - } else if (args.length < 2) return 'Correct usage: /warn ' + // If improper arguments were provided, then we must inform the user. + if (args.length < 2) return 'Correct usage: /warn ' // Now find the user ID. let user = getUser(message, args[0]) if (!user) return `Specify a valid member of this guild, ${getInsult()}.` @@ -25,7 +24,7 @@ export const handleWarn: IveBotCommand = ({ createMessage, getDMChannel }, tempD checkRolePosition(message.member.guild.members.find(i => i.user === user)) >= checkRolePosition(message.member) ) { - return 'You cannot warn this person! People nowadays.' + return `You cannot warn this person, you ${getInsult()}.` } // Warn the person internally. args.shift() diff --git a/server/bot/index.ts b/server/bot/index.ts index eb2df36..7738b3f 100644 --- a/server/bot/index.ts +++ b/server/bot/index.ts @@ -16,8 +16,8 @@ import { handleDefine } from './oldCommands/api' import { - handleKick, handleBan, handleUnban, handleMute, handleUnmute, - handleGiverole, handleTakerole, handleWarnings, handleClearwarns, handleRemovewarn, handlePurge + handleUnban, handleMute, handleUnmute, handleTakerole, + handleGiverole, handleWarnings, handleClearwarns, handleRemovewarn } from './oldCommands/admin' // We need types. @@ -159,12 +159,7 @@ export default (client: client, tempDB: DB, db: mongoDB) => async (event: messag '/changeserverregion': () => handleChangeserverregion(client, event, sendResponse, message), '/csr': () => handleChangeserverregion(client, event, sendResponse, message), // Administrative commands. - '/ban': () => handleBan(client, event, sendResponse, message), - '/banana': () => handleBan(client, event, sendResponse, message), - '/nuke': () => handleBan(client, event, sendResponse, message), '/unban': () => handleUnban(client, event, sendResponse, message), - '/kick': () => handleKick(client, event, sendResponse, message), - '/purge': () => handlePurge(client, event, sendResponse, message), '/mute': () => handleMute(client, event, sendResponse, message), '/unmute': () => handleUnmute(client, event, sendResponse, message), '/clearwarns': () => handleClearwarns(client, event, sendResponse, message, db), diff --git a/server/bot/oldCommands/admin/ban.ts b/server/bot/oldCommands/admin/ban.ts index 85be40e..f1b6249 100644 --- a/server/bot/oldCommands/admin/ban.ts +++ b/server/bot/oldCommands/admin/ban.ts @@ -1,63 +1,7 @@ import { getArguments, getIdFromMention } from '../../imports/tools' -import { checkRolePosition } from '../../imports/permissions' // Get types. import { client, event } from '../../imports/types' -// Ban! -export function handleBan (client: client, event: event, sendResponse: Function, message: string) { - // Check user for permissions. - if (!event.member.permission.has('banMembers')) { - sendResponse('**Thankfully, you don\'t have enough permissions for that, you ungrateful bastard.**') - return - } - // Check for valid user. - let userID = getIdFromMention(getArguments(message).split(' ')[0]) - const ifUserId = getArguments(message).split(' ')[0] - if (event.member.guild.members.find(a => a.id === ifUserId)) userID = ifUserId - else if ( - event.member.guild.members.find(a => a.username.toLowerCase() === ifUserId.toLowerCase()) - ) userID = event.member.guild.members.find(a => a.username.toLowerCase() === ifUserId.toLowerCase()).id - // eslint-disable-next-line no-unused-vars - const member = event.member.guild.members.find(a => a.id === userID) - if (!member) { sendResponse('Please specify a valid user.'); return } - // Get information about user. - const serverName = event.member.guild.name - if (checkRolePosition(member) >= checkRolePosition(event.member)) { - sendResponse('You cannot ban this person! People nowadays.'); return - } - // and.. cut. - let banned = true - client.kickGuildMember(event.member.guild.id, userID, getArguments(getArguments(message))) - .then(() => sendResponse(`**${member.username}#${member.discriminator}** has been banned. **rip.**`)) - .catch(() => { sendResponse('I can\'t ban that person.'); banned = false }) - // DM the poor user. - setTimeout(() => { - if (!banned) return - if (getArguments(getArguments(message)).trim()) { - client.getDMChannel(userID).then((c) => client.createMessage( - c.id, `You have been banned from ${serverName} for ${getArguments(getArguments(message))}.` - )) - // WeChill - if (event.member.guild.id === '402423671551164416') { - client.createMessage( - '402437089557217290', - `**${member.username}#${member.discriminator}** has been banned for **${getArguments(getArguments(message))}**.` - ) - } - } else { - // WeChill - if (event.member.guild.id === '402423671551164416') { - client.createMessage( - '402437089557217290', - `**${member.username}#${member.discriminator}** has been banned for not staying chill >:L ` - ) - } - client.getDMChannel(userID) - .then((c) => client.createMessage(c.id, `You have been banned from ${serverName}.`)) - } - }, 1000) -} - // Unban. Aw.. export function handleUnban (client: client, event: event, sendResponse: Function, message: string) { // Check user for permissions. diff --git a/server/bot/oldCommands/admin/index.ts b/server/bot/oldCommands/admin/index.ts index 97b1d75..f3fafa3 100644 --- a/server/bot/oldCommands/admin/index.ts +++ b/server/bot/oldCommands/admin/index.ts @@ -1,83 +1,5 @@ -import { getArguments, getIdFromMention } from '../../imports/tools' -import { checkRolePosition } from '../../imports/permissions' -// Get types. -import { client, event } from '../../imports/types' - // Import export from sub-files. -export { handleBan, handleUnban } from './ban' +export { handleUnban } from './ban' export { handleWarnings, handleClearwarns, handleRemovewarn } from './warn' export { handleMute, handleUnmute } from './mute' export { handleGiverole, handleTakerole } from './roles' - -// Purge! -export function handlePurge (client: client, event: event, sendResponse: Function, message: string) { - // Check user for permissions. - if (!event.member.permission.has('manageMessages')) { - sendResponse('**Thankfully, you don\'t have enough permissions for that, you ungrateful bastard.**') - return - } else if ( - isNaN(+getArguments(message)) || !getArguments(message) || +getArguments(message) === 0 - ) { sendResponse('Correct usage: /purge (channel) '); return } - // Get the list of messages. - client.getMessages(event.channel.id, +getArguments(message), event.id).then((res) => { - res.push(event) - client.deleteMessages(event.channel.id, res.map(e => e.id)).catch(() => { - sendResponse(`Could not delete messages. Are the messages older than 2 weeks?`) - }) - }).catch(() => sendResponse('Could not retrieve messages.')) -} - -// Kick! -export function handleKick (client: client, event: event, sendResponse: Function, message: string) { - // Check user for permissions. - if (!event.member.permission.has('kickMembers')) { - sendResponse('**Thankfully, you don\'t have enough permissions for that, you ungrateful bastard.**') - return - } - // Check for valid user. - let userID = getIdFromMention(getArguments(message).split(' ')[0]) - const ifUserId = getArguments(message).split(' ')[0] - if (event.member.guild.members.find(a => a.id === ifUserId)) userID = ifUserId - else if ( - event.member.guild.members.find(a => a.username.toLowerCase() === ifUserId.toLowerCase()) - ) userID = event.member.guild.members.find(a => a.username.toLowerCase() === ifUserId.toLowerCase()).id - // eslint-disable-next-line no-unused-vars - const member = event.member.guild.members.find(a => a.id === userID) - if (!member) { sendResponse('Please specify a valid user.'); return } - // Get information about user. - const serverName = event.member.guild.name - if (checkRolePosition(member) >= checkRolePosition(event.member)) { - sendResponse('You cannot kick this person! People nowadays.'); return - } - // and.. cut. - let kicked = true - client.kickGuildMember(event.member.guild.id, userID, getArguments(getArguments(message))) - .then(() => sendResponse(`**${member.username}#${member.discriminator}** has been kicked. **rip.**`)) - .catch(() => { sendResponse('I can\'t kick that person.'); kicked = false }) - // DM the poor user. - setTimeout(() => { - if (!kicked) return - if (getArguments(getArguments(message)).trim()) { - client.getDMChannel(userID).then((c) => client.createMessage( - c.id, `You have been kicked from ${serverName} for ${getArguments(getArguments(message))}.` - )) - // WeChill - if (event.member.guild.id === '402423671551164416') { - client.createMessage( - '402437089557217290', - `**${member.username}#${member.discriminator}** has been kicked for **${getArguments(getArguments(message))}**.` - ) - } - } else { - // WeChill - if (event.member.guild.id === '402423671551164416') { - client.createMessage( - '402437089557217290', - `**${member.username}#${member.discriminator}** has been kicked for not staying chill >:L ` - ) - } - client.getDMChannel(userID) - .then((c) => client.createMessage(c.id, `You have been kicked from ${serverName}.`)) - } - }, 1000) -}