Last active
July 5, 2022 08:18
-
-
Save PhantomNimbi/8073b7c6bdfd12adfbcd07ccc06914ba to your computer and use it in GitHub Desktop.
Pylon.Bot Karma System
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import * as app from '../config'; | |
let config = { | |
slashCommands: discord.interactions.commands, | |
logger: { | |
channel_id: '927217111342936074', | |
embed_color: discord.decor.RoleColors.DARK_RED, | |
}, | |
embeds: { | |
color: discord.decor.RoleColors.BLUE, | |
}, | |
}; | |
let karma_storage = new pylon.KVNamespace('karma'); | |
let slashCommands = config.slashCommands; | |
async function getBalance(userId: discord.Snowflake): Promise<number> { | |
const bal = await karma_storage.get<number>(userId); | |
return bal || 0; | |
} | |
discord.on('MESSAGE_CREATE', async (message) => { | |
const user = await discord.getUser(message.mentions[0].id); | |
if (message.mentions[0] == null) { | |
return; | |
} | |
if ( | |
(message.content.toLowerCase().includes('thanks') || | |
message.content.toLowerCase().includes('thx') || | |
message.content.toLowerCase().includes('ty') || | |
message.content.toLowerCase().includes('thank you') || | |
message.content.toLowerCase().match(/\bty\b/)) && | |
message.author.id != message.mentions[0].id | |
) { | |
if ( | |
((await karma_storage.get<any>(`timeOut.${message.mentions[0].id}`)) ?? | |
0) + | |
3600000 <= | |
new Date().getTime() | |
) { | |
await karma_storage.put( | |
`timeOut.${message.mentions[0].id}`, | |
new Date().getTime() | |
); | |
const karma = await karma_storage.get<number>( | |
`karma.${message.mentions[0].id}` ?? 0 | |
); | |
await karma_storage.cas( | |
`karma.${message.mentions[0].id}`, | |
// @ts-ignore | |
karma, | |
(karma ?? 0) + 1 | |
); | |
let response = // @ts-ignore | |
user.username + | |
' got +1 karma! (The user has now: ' + | |
(await karma_storage.get<number>(`karma.${message.mentions[0].id}`)) + | |
' karma!)'; | |
await message.reply(response); | |
} else { | |
let response = | |
'The user: ' + // @ts-ignore | |
user.username + | |
' was thank last time in less than one hour! Please wait to rethank them.'; | |
await message.reply(response); | |
} | |
} | |
}); | |
slashCommands.register( | |
{ | |
name: 'karma', | |
description: 'Display the karma of a specified user', | |
ackBehavior: slashCommands.AckBehavior.AUTO_EPHEMERAL, | |
options: (opts) => ({ | |
member: opts.guildMember({ | |
required: false, | |
description: "The member who's karma you wish to display.", | |
}), | |
}), | |
}, | |
async (interaction, { member }) => { | |
let self = await discord.getBotUser(); | |
try { | |
if (member == undefined) { | |
const balance = await karma_storage.get<number>( | |
`karma.${interaction.member.user.id}` | |
); | |
let bal = balance || 0; | |
await interaction.respond({ | |
content: `🙏 ${interaction.member.user.username} has ${bal} karma`, | |
}); | |
} else { | |
if (member !== undefined) { | |
const balance = await karma_storage.get<number>( | |
`karma.${member.user.id}` | |
); | |
let bal = balance || 0; | |
await interaction.respond({ | |
content: `🙏 ${member.user.username} has ${bal} karma`, | |
}); | |
} | |
} | |
} catch (_) { | |
let logChannel = await discord.getTextChannel(config.logger.channel_id); | |
let embed = new discord.Embed(); | |
console.log( | |
// @ts-ignore | |
`>> | (${_.code}) ${_.name}: ${_.message} \n------------------------------------------------------------\n${_.stack}` | |
); | |
embed.setTitle(':warning: Error Triggered :warning:'); | |
embed.setFields([ | |
{ | |
name: 'Error Code', | |
// @ts-ignore | |
value: '```ts\n' + _.code + '\n```', | |
inline: true, | |
}, | |
{ | |
name: 'Error Name', | |
// @ts-ignore | |
value: '```ts\n' + _.name + '\n```', | |
inline: true, | |
}, | |
// @ts-ignore | |
{ name: 'Error Message', value: _.message, inline: false }, | |
{ | |
name: 'Error Stack', | |
// @ts-ignore | |
value: ['```ts', `${_.stack}`, '```'].join('\n'), | |
inline: false, | |
}, | |
]); | |
embed.setColor(config.logger.embed_color); | |
embed.setTimestamp(new Date().toISOString()); | |
embed.setFooter({ | |
text: 'Powered by ' + self.username, | |
iconUrl: self.getAvatarUrl(), | |
}); | |
await logChannel?.sendMessage(embed); | |
} | |
} | |
); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment