Skip to content

Commit

Permalink
Port purge, ban and kick to new command architecture.
Browse files Browse the repository at this point in the history
  • Loading branch information
retrixe committed May 26, 2018
1 parent 5065bae commit 08ec253
Show file tree
Hide file tree
Showing 6 changed files with 126 additions and 149 deletions.
72 changes: 72 additions & 0 deletions server/bot/commands/admin.ts
Original file line number Diff line number Diff line change
@@ -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 <number greater than 0>',
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 <number greater than 0>' }
// 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 <user by ID/username/mention> (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 `
)
}
})
}
})
45 changes: 45 additions & 0 deletions server/bot/commands/admin/ban.ts
Original file line number Diff line number Diff line change
@@ -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 <user by ID/username/mention> (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 `
)
}
})
}
})
13 changes: 6 additions & 7 deletions server/bot/commands/admin/warn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,13 @@ export const handleWarn: IveBotCommand = ({ createMessage, getDMChannel }, tempD
description: 'Warn someone.',
fullDescription: 'Warn someone.',
usage: '/warn <user by ID/username/mention> <reason>',
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 <user> <reason>'
// If improper arguments were provided, then we must inform the user.
if (args.length < 2) return 'Correct usage: /warn <user> <reason>'
// Now find the user ID.
let user = getUser(message, args[0])
if (!user) return `Specify a valid member of this guild, ${getInsult()}.`
Expand All @@ -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()
Expand Down
9 changes: 2 additions & 7 deletions server/bot/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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),
Expand Down
56 changes: 0 additions & 56 deletions server/bot/oldCommands/admin/ban.ts
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
80 changes: 1 addition & 79 deletions server/bot/oldCommands/admin/index.ts
Original file line number Diff line number Diff line change
@@ -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) <number greater than 0>'); 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)
}

0 comments on commit 08ec253

Please sign in to comment.