k44Eqha/misc.js

149 lines
6.0 KiB
JavaScript

// join/leave
(async function(){
var webhook = new Discord.WebhookClient(config.webhooks.welcome[0], config.webhooks.welcome[1]);
dClient.on('local_guildMemberAdd', async member => {
let username = member.user.username.toLowerCase().includes('clyde') ? member.user.username.replace(/C/g,'Q').replace(/c/g,'q') : member.user.username;
webhook.send(`${member} joined.`, {username, avatarURL: member.user.displayAvatarURL({format:'png',size:2048}), disableMentions:'everyone'});
});
dClient.on('local_guildMemberRemove', async member => {
let username = member.user.username.toLowerCase().includes('clyde') ? member.user.username.replace(/C/g,'Q').replace(/c/g,'q') : member.user.username;
webhook.send(`${member.user.tag} left.`, {username, avatarURL: member.user.displayAvatarURL({format:'png',size:2048}), disableMentions:'everyone'});
});
})();
// view deleted channels
(async function(){
var vcid = config.channels.view_deleted_channels;
var rid = config.roles.viewing_deleted_channels;
dClient.on('local_voiceStateUpdate', async (oldState, newState) => {
if (oldState.channelID != vcid && newState.channelID == vcid) {
// member joined the channel
newState.member.roles.add(newState.member.guild.roles.resolve(rid));
} else if (oldState.channelID == vcid && newState.channelID != vcid) {
// member left the channel
newState.member.roles.remove(newState.member.guild.roles.resolve(rid));
}
});
})();
// prevent identical display names
/*{
let onName = async function(member){
let names = member.guild.members.map(m => m.name);
if (names.includes(member.displayName)) {
let nam = member.displayName.split(' ');
let num = nam.pop();
if (isNaN(num)) {
nam.push(num);
num = "2";
} else {
num = String(++num);
}
nam = nam.substr(0, num.length-1);
await member.setNickname(`${nam} ${num}`);
}
}
dClient.on("local_guildMemberUpdate", async (oldMember, newMember) => {
if (oldMember.displayName != newMember.displayName) onName(newMember);
});
}*/// didn't work D:
// arrange bots at bottom of list
(async function(){
let prefix = "\u17b5";
let onNick = async member => {
if (member.user.bot && !member.displayName.startsWith(prefix))
await member.setNickname(`${prefix}${member.displayName}`.substr(0,32));
};
dClient.on('local_guildMemberAdd', onNick);
dClient.on('local_guildMemberUpdate', async (oldMember, newMember) => {
if (newMember.displayName != oldMember.displayName) await onNick(newMember);
});
})();
// prevent identical display names
/*(async function(){
dClient.on("local_guildMemberUpdate", async (oldMember, newMember) => {
//var displayNames = newMember.guild.members.map(m => m.displayName);
//if (newMember.nickname && displayNames.includes(newMember.nickname)) newMember.setNickname('');
//else if (displayNames.includes(newMember.displayName)) newMember.setNickname(`${newMember.displayName}_`.substr(0,32));
for (let thisMember of newMember.guild.members) {
thisMember = thisMember[1];
if (thisMember.id == newMember.id) continue; //THIS WAS SUPPOSED TO MAKE IT NOT REPEATEDLY CHANGE YOUR NAME!
if (newMember.nickname == thisMember.displayName) {
newMember.setNickname('');
break;
}
else if (newMember.displayName == thisMember.displayName) {
newMember.setNickname(`${newMember.displayName}_`.substr(0,32));
break;
}
}
});
})();*/
// persistent emojis
dClient.on("local_emojiDelete", async emoji => {
console.log("emoji deleted:", emoji.name, emoji.url);
if (global.disableEmojiProtection) return;
if (emoji.name.toLowerCase().includes('delete')) return;
async function readdEmoji() {
await emoji.guild.emojis.create(emoji.url, emoji.name);
delete readdEmoji;
}
// re-add emoji in 5 to 10 minutes
setTimeout(() => {
if (readdEmoji) readdEmoji();
}, 300000 + Math.random() * 300000);
// wouldn't want emoji to be lost if process is stopped before timeout ends
exitHook(callback => {
if (readdEmoji) readdEmoji().then(() => callback());
else callback();
});
});
// pinboard // this was removed but no harm leaving it working ¯\_(ツ)_/¯
(async function(){
var webhook = new Discord.WebhookClient(config.webhooks.pinboard[0], config.webhooks.pinboard[1]);
dClient.on("local_messageReactionAdd", async (messageReaction, user) => {
if (!(messageReaction.emoji.name == "📌" || messageReaction.emoji.name == "📍")) return;
if (!(user.id == messageReaction.message.author.id || messageReaction.message.guild.members.resolve(user.id).hasPermission('MANAGE_MESSAGES'))) return;// if message is theirs or user is mod
var message = messageReaction.message;
await webhook.send(`https://discordapp.com/channels/${message.guild.id}/${message.channel.id}/${message.id}`, {embeds:[{
color: (message.member && message.member.displayColor) || undefined,
author: {
name: (message.member && message.member.displayName) || message.author.username,
icon_url: message.author.avatarURL({format:'png'})
},
description: message.content,
timestamp: message.createdAt,
image: (message.attachments.first() && message.attachments.first().width) ? {url:message.attachments.first().url} : undefined,
footer: {
text: `#${message.channel.name}`
}
}]});
});
})();
// allow anyone to pin a message via reaction
dClient.on("local_messageReactionAdd", async (messageReaction) => {
if (messageReaction.emoji.name == "📌" || messageReaction.emoji.name == "📍")
await messageReaction.message.pin();
});