add /avatar and /nick
This commit is contained in:
parent
a06c3547fb
commit
7a7ffcc805
2 changed files with 122 additions and 0 deletions
64
bot/src/bot/commands/avatar.ts
Normal file
64
bot/src/bot/commands/avatar.ts
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
import { Member } from "@janderedev/revolt.js/dist/maps/Members";
|
||||||
|
import axios from "axios";
|
||||||
|
import CommandCategory from "../../struct/commands/CommandCategory";
|
||||||
|
import SimpleCommand from "../../struct/commands/SimpleCommand";
|
||||||
|
import MessageCommandContext from "../../struct/MessageCommandContext";
|
||||||
|
import { hasPerm, isModerator, NO_MANAGER_MSG, parseUser } from "../util";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'avatar',
|
||||||
|
aliases: [ 'pfp' ],
|
||||||
|
description: 'Get or clear someone\'s avatar',
|
||||||
|
category: CommandCategory.Moderation,
|
||||||
|
run: async (message: MessageCommandContext, args: string[]) => {
|
||||||
|
try {
|
||||||
|
const targetStr = args.shift();
|
||||||
|
if (!targetStr) return message.reply('No target user specified.');
|
||||||
|
const targetUser = await parseUser(targetStr);
|
||||||
|
if (!targetUser) return message.reply('Couldn\'t find the specified user.');
|
||||||
|
const target = await message.channel?.server?.fetchMember(targetUser);
|
||||||
|
if (!target) return message.reply('The target is not part of this server.');
|
||||||
|
|
||||||
|
if (args[0]?.toLowerCase() == 'reset'
|
||||||
|
|| args[0]?.toLowerCase() == 'clear') {
|
||||||
|
// Clear server avatar
|
||||||
|
if (!message.member) return;
|
||||||
|
if (!hasPerm(message.member, 'RemoveAvatars')
|
||||||
|
&& !await isModerator(message)) return message.reply(NO_MANAGER_MSG);
|
||||||
|
|
||||||
|
if (!target.avatar) {
|
||||||
|
await message.reply(`\`@${targetUser.username}\` does not currently have an avatar set for this server.`);
|
||||||
|
} else {
|
||||||
|
await clearAvatar(target);
|
||||||
|
await message.reply(`\`@${targetUser.username}\`'s server avatar has been cleared.`);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Print server and global avatar
|
||||||
|
|
||||||
|
await message.reply(
|
||||||
|
`### \`@${targetUser.username}\`'s avatar\n` +
|
||||||
|
(targetUser.avatar ? `[\\[Global\\]](<${targetUser.generateAvatarURL()}>)` : '[No global avatar]') +
|
||||||
|
' | ' +
|
||||||
|
(target.avatar ? `[\\[Server\\]](<${target.generateAvatarURL()}>)` : '[No server avatar]')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} catch(e) {
|
||||||
|
console.error('' + e);
|
||||||
|
message.reply('Something went wrong: ' + e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} as SimpleCommand;
|
||||||
|
|
||||||
|
async function clearAvatar(member: Member) {
|
||||||
|
await axios.patch(
|
||||||
|
`${member.client.apiURL}/servers/${member.server!._id}/members/${member._id.user}`,
|
||||||
|
{
|
||||||
|
remove: "Avatar",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
'x-bot-token': process.env['BOT_TOKEN']!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
58
bot/src/bot/commands/nick.ts
Normal file
58
bot/src/bot/commands/nick.ts
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
import { Member } from "@janderedev/revolt.js/dist/maps/Members";
|
||||||
|
import axios from "axios";
|
||||||
|
import CommandCategory from "../../struct/commands/CommandCategory";
|
||||||
|
import SimpleCommand from "../../struct/commands/SimpleCommand";
|
||||||
|
import MessageCommandContext from "../../struct/MessageCommandContext";
|
||||||
|
import { hasPerm, isModerator, NO_MANAGER_MSG, parseUser } from "../util";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'nick',
|
||||||
|
aliases: [ 'setnick' ],
|
||||||
|
description: 'Set or clear someone\'s nickname',
|
||||||
|
category: CommandCategory.Moderation,
|
||||||
|
run: async (message: MessageCommandContext, args: string[]) => {
|
||||||
|
try {
|
||||||
|
if (!message.member) return;
|
||||||
|
if (!hasPerm(message.member, 'ManageNicknames')
|
||||||
|
&& !await isModerator(message)) return message.reply(NO_MANAGER_MSG);
|
||||||
|
|
||||||
|
const targetStr = args.shift();
|
||||||
|
if (!targetStr) return message.reply('No target user specified.');
|
||||||
|
const targetUser = await parseUser(targetStr);
|
||||||
|
if (!targetUser) return message.reply('Couldn\'t find the specified user.');
|
||||||
|
const target = await message.channel?.server?.fetchMember(targetUser);
|
||||||
|
if (!target) return message.reply('The target is not part of this server.');
|
||||||
|
|
||||||
|
const newName = args.join(' ');
|
||||||
|
|
||||||
|
if (!newName) {
|
||||||
|
// Reset name
|
||||||
|
await setNick(target, null);
|
||||||
|
await message.reply(`Nickname of \`@${targetUser.username}\` has been cleared.`);
|
||||||
|
} else {
|
||||||
|
// Set new name
|
||||||
|
await setNick(target, newName);
|
||||||
|
await message.reply(`Nickname of \`@${targetUser.username}\` has been changed to `
|
||||||
|
+ `"${newName.replace(/`/g, '\\`')}".`);
|
||||||
|
}
|
||||||
|
} catch(e) {
|
||||||
|
console.error('' + e);
|
||||||
|
message.reply('Something went wrong: ' + e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} as SimpleCommand;
|
||||||
|
|
||||||
|
async function setNick(member: Member, newName: string|null) {
|
||||||
|
await axios.patch(
|
||||||
|
`${member.client.apiURL}/servers/${member.server!._id}/members/${member._id.user}`,
|
||||||
|
{
|
||||||
|
nickname: newName || undefined,
|
||||||
|
remove: !newName ? "Nickname" : undefined,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
'x-bot-token': process.env['BOT_TOKEN']!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
Loading…
Reference in a new issue