1
0
mirror of https://github.com/toast-ts/Daggerbot-TS.git synced 2024-09-29 12:30:58 -04:00

700th commit, add new dev subcmd.

This commit is contained in:
toast-ts 2024-01-08 20:22:06 +11:00
parent 9516c7b098
commit bbef3da0cc
3 changed files with 39 additions and 16 deletions

View File

@ -122,6 +122,22 @@ export default class Developer {
const message = interaction.options.getString('message'); const message = interaction.options.getString('message');
const int = await interaction.reply({content: '*Sending...*', fetchReply: true}); const int = await interaction.reply({content: '*Sending...*', fetchReply: true});
client.users.cache.get(member.id).send(`${message}\n╰ ${interaction.member.displayName}`).then(()=>int.edit(`Successfully sent a DM to **${member.user.username}** with the following message:\n\`\`\`${message}\`\`\``)).catch((e:Error)=>int.edit(`\`${e.message}\``)) client.users.cache.get(member.id).send(`${message}\n╰ ${interaction.member.displayName}`).then(()=>int.edit(`Successfully sent a DM to **${member.user.username}** with the following message:\n\`\`\`${message}\`\`\``)).catch((e:Error)=>int.edit(`\`${e.message}\``))
},
modify_rank_msgs: async()=>{
const member = interaction.options.getMember('member');
const messages = interaction.options.getInteger('new-messages-count');
const oldData = await client.userLevels.fetchUser(member.id);
const newData = await client.userLevels.modifyUser(member.id, messages);
await interaction.reply({embeds:[new client.embed()
.setColor(client.config.embedColorGreen)
.setDescription(MessageTool.concatMessage(
`Successfully modified the messages count of **${member.displayName}**`,
`╰ Old: **${oldData.dataValues.messages.toLocaleString('en-US')}**`,
`╰ New: **${newData.messages.toLocaleString('en-US')}**`,
`╰ Difference: **${(newData.messages - oldData.dataValues.messages).toLocaleString('en-US')}**`,
'Although if you set the number too high or low, it will have a bigger impact on the leaderboard graph.'
))
]})
} }
} as any)[interaction.options.getSubcommand()](); } as any)[interaction.options.getSubcommand()]();
} }
@ -190,4 +206,17 @@ export default class Developer {
.setName('message') .setName('message')
.setDescription('Message to send') .setDescription('Message to send')
.setRequired(true))) .setRequired(true)))
.addSubcommand(x=>x
.setName('modify_rank_msgs')
.setDescription('Modify the messages count of a member')
.addUserOption(x=>x
.setName('member')
.setDescription('Member to modify the messages count of')
.setRequired(true))
.addIntegerOption(x=>x
.setName('new-messages-count')
.setDescription('Replace the messages count of the member with this number')
.setRequired(true)
.setMinValue(5)
.setMaxValue(1999999999)))
} }

View File

@ -5,18 +5,14 @@ import CanvasBuilder from '../components/CanvasGraph.js';
export default class Rank { export default class Rank {
static async run(client: TClient, interaction: Discord.ChatInputCommandInteraction<'cached'>){ static async run(client: TClient, interaction: Discord.ChatInputCommandInteraction<'cached'>){
if (interaction.guildId !== client.config.dcServer.id) return interaction.reply({content: 'This command doesn\'t work in this server.', ephemeral: true}); if (interaction.guildId !== client.config.dcServer.id) return interaction.reply({content: 'This command doesn\'t work in this server.', ephemeral: true});
// const allData = await client.userLevels._content.find();
const allData = await client.userLevels.fetchEveryone(); const allData = await client.userLevels.fetchEveryone();
({ ({
view: async()=>{ view: async()=>{
// fetch user or user interaction sender
const member = interaction.options.getMember('member') ?? interaction.member as Discord.GuildMember; const member = interaction.options.getMember('member') ?? interaction.member as Discord.GuildMember;
if (member.user.bot) return interaction.reply('Bots don\'t level up, try viewing the rank data from the users instead.'); if (member.user.bot) return interaction.reply('Bots don\'t level up, try again with an actual member instead.');
// information about users progress on level roles
// const userData = await client.userLevels._content.findById(member.user.id);
const userData = await client.userLevels.fetchUser(member.user.id); const userData = await client.userLevels.fetchUser(member.user.id);
const pronounBool = (you: string, they: string) => { // takes 2 words and chooses which to use based on if user did this command on themself const pronounBool = (you: string, they: string) => { // takes 2 words and chooses which to use based on if user did this command on themselves
if (interaction.user.id === member.user.id) return you || true; if (interaction.user.id === member.user.id) return you || true;
else return they || false; else return they || false;
}; };
@ -26,13 +22,13 @@ export default class Rank {
const memberDifference = userData.dataValues.messages - client.userLevels.algorithm(userData.dataValues.level); const memberDifference = userData.dataValues.messages - client.userLevels.algorithm(userData.dataValues.level);
const levelDifference = client.userLevels.algorithm(userData.dataValues.level+1) - client.userLevels.algorithm(userData.dataValues.level); const levelDifference = client.userLevels.algorithm(userData.dataValues.level+1) - client.userLevels.algorithm(userData.dataValues.level);
let ptText = 'Ping toggle '; let ptText = 'Ping toggle ';
interaction.reply({embeds: [new client.embed().setColor(member.displayColor).setTitle(`Level: **${userData.dataValues.level}**\nRank: **${index ? '#' + index : 'last'}**\nProgress: **${memberDifference}/${levelDifference} (${(memberDifference/levelDifference*100).toFixed(2)}%)**\nTotal: **${userData.dataValues.messages/* .toLocaleString('en-US') */}**`).setThumbnail(member.avatarURL({extension:'png',size:1024}) || member.user.avatarURL({extension:'png',size:1024}) || member.user.defaultAvatarURL).setFooter({text: userData.pingToggle === true ? ptText += 'enabled' : ptText += 'disabled'})]}) interaction.reply({embeds: [new client.embed().setColor(member.displayColor).setTitle(`Level: **${userData.dataValues.level}**\nRank: **${index ? '#' + index : 'last'}**\nProgress: **${memberDifference}/${levelDifference} (${(memberDifference/levelDifference*100).toFixed(2)}%)**\nTotal: **${userData.dataValues.messages.toLocaleString('en-US')}**`).setThumbnail(member.avatarURL({extension:'png',size:1024}) || member.user.avatarURL({extension:'png',size:1024}) || member.user.defaultAvatarURL).setFooter({text: userData.pingToggle === true ? ptText += 'enabled' : ptText += 'disabled'})]})
}, },
leaderboard: async()=>{ leaderboard: async()=>{
const data = (await client.dailyMsgs.fetchDays()).map(x=>[x.dataValues.day, x.dataValues.total]).sort((a,b)=>a[0]-b[0]).slice(-60).map((x: number[], i: number, a: any)=>{ const data = (await client.dailyMsgs.fetchDays()).map(x=>[x.dataValues.day, x.dataValues.total]).sort((a,b)=>a[0]-b[0]).slice(-60).map((x: number[], i: number, a: any)=>{
return x[1] - ((a[i - 1] || [])[1] || x[1]) return x[1] - ((a[i - 1] || [])[1] || x[1])
}); });
if (data.length < 3) return interaction.reply('Not enough data to generate graph.'); if (data.length < 2) return interaction.reply('Not enough data to generate graph.');
const graph = await new CanvasBuilder().generateGraph(data, 'leaderboard'); const graph = await new CanvasBuilder().generateGraph(data, 'leaderboard');
interaction.reply({ interaction.reply({
@ -44,18 +40,18 @@ export default class Rank {
name: 'Top users sorted by messages sent:', name: 'Top users sorted by messages sent:',
value: allData.sort((a,b)=>b.messages - a.messages).slice(0,15).map((x,i)=>`${i+1}. <@${x.dataValues.id}>: ${x.messages.toLocaleString('en-US')}`).join('\n') value: allData.sort((a,b)=>b.messages - a.messages).slice(0,15).map((x,i)=>`${i+1}. <@${x.dataValues.id}>: ${x.messages.toLocaleString('en-US')}`).join('\n')
}).setImage('attachment://dailyMessages.jpg').setFooter({text: 'Graph updates daily'})], }).setImage('attachment://dailyMessages.jpg').setFooter({text: 'Graph updates daily'})],
files: [new client.attachment(graph.toBuffer(),{name: 'dailyMessages.jpg'})] files: [new client.attachment(graph.toBuffer(), {name: 'dailyMessages.jpg'})]
}) })
}, },
notification: async()=>{ notification: async()=>{
const findUserInDatabase = await client.userLevels.fetchUser(interaction.user.id); const findUserInDatabase = await client.userLevels.fetchUser(interaction.user.id);
const textDeco = ' be pinged for level-up notification in the future.' const textDeco = 'be pinged for level-up notifications.'
if (!findUserInDatabase.pingToggle) { if (!findUserInDatabase.pingToggle) {
await findUserInDatabase.update({pingToggle: true}, {where: {id: interaction.user.id}}) await findUserInDatabase.update({pingToggle: true}, {where: {id: interaction.user.id}})
interaction.reply({content: 'You will'+textDeco, ephemeral: true}) interaction.reply({content: 'You will '+textDeco, ephemeral: true})
} else if (findUserInDatabase.pingToggle) { } else if (findUserInDatabase.pingToggle) {
await findUserInDatabase.update({pingToggle: false}, {where: {id: interaction.user.id}}) await findUserInDatabase.update({pingToggle: false}, {where: {id: interaction.user.id}})
interaction.reply({content: 'You won\'t'+textDeco, ephemeral: true}) interaction.reply({content: 'You won\'t '+textDeco, ephemeral: true})
} }
} }
} as any)[interaction.options.getSubcommand()](); } as any)[interaction.options.getSubcommand()]();

View File

@ -31,10 +31,8 @@ export default class MessageCreate {
} }
if (message.guildId === client.config.dcServer.id && !automodded) client.userLevels.messageIncremental(message.author.id); if (message.guildId === client.config.dcServer.id && !automodded) client.userLevels.messageIncremental(message.author.id);
// Mop gifs from banned channels without Monster having to mop them. // Mop gifs from banned channels without admins having to mop them.
const bannedChannels = [ const bannedChannels = []
'742324777934520350', // #discord-moderators
]
if (['tenor.com/view', 'giphy.com/gifs', 'giphy.com/media'].some(e=>message.content.toLowerCase().includes(e)) && bannedChannels.includes(message.channelId)) message.reply('Gifs are not allowed in this channel.').then(()=>message.delete()) if (['tenor.com/view', 'giphy.com/gifs', 'giphy.com/media'].some(e=>message.content.toLowerCase().includes(e)) && bannedChannels.includes(message.channelId)) message.reply('Gifs are not allowed in this channel.').then(()=>message.delete())
// Autoresponse:tm: // Autoresponse:tm: