Skip to content

Instantly share code, notes, and snippets.

@PhantomNimbi
Last active July 5, 2022 08:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PhantomNimbi/8073b7c6bdfd12adfbcd07ccc06914ba to your computer and use it in GitHub Desktop.
Save PhantomNimbi/8073b7c6bdfd12adfbcd07ccc06914ba to your computer and use it in GitHub Desktop.
Pylon.Bot Karma System
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