FAQ-Bot/index.js
Lisa 8b7905907a small update for V2
just extended messages db
2025-03-12 10:30:53 +01:00

255 lines
12 KiB
JavaScript

// FAQ BOT BY LISA NIGHTSHADE
// EMAIL: lisahonkay@gmail.com
// CC-BY-SA-4.0
// VERSION 2
const { Client, GatewayIntentBits, MessageEmbed, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js');
const natural = require('natural');
const { BayesClassifier } = natural;
const classifier = new BayesClassifier
const tokenizer = new natural.WordTokenizer();
const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent] });
const channelId = ''; // Replace with your channel ID
// COINS CATEGORY
classifier.addDocument('how can I get more coins', 'coins');
classifier.addDocument('any advice on earning coins', 'coins');
classifier.addDocument('tips for getting coins quickly', 'coins');
classifier.addDocument('best ways to earn coins', 'coins');
classifier.addDocument('methods for obtaining coins', 'coins');
classifier.addDocument('how can I gather coins', 'coins');
classifier.addDocument('strategies to collect coins', 'coins');
classifier.addDocument('what are the techniques to get coins', 'coins');
// INVITE REWARD CATEGORY
classifier.addDocument('how to claim invite reward', 'invite');
classifier.addDocument('claim invite reward', 'invite');
classifier.addDocument('can I get an invite reward', 'invite');
classifier.addDocument('is there an invite reward', 'invite');
classifier.addDocument('steps to claim invite reward', 'invite');
classifier.addDocument('redeem invite reward', 'invite');
classifier.addDocument('process to get invite reward', 'invite');
classifier.addDocument('guide to claim invite reward', 'invite');
classifier.addDocument('how do I earn invite reward', 'invite');
classifier.addDocument('how can I receive invite reward', 'invite');
classifier.addDocument('getting reward for invites', 'invite');
classifier.addDocument('can I receive a reward for inviting friends', 'invite');
classifier.addDocument('how to get reward for inviting others', 'invite');
classifier.addDocument('steps to redeem invite reward', 'invite');
classifier.addDocument('how to obtain invite reward', 'invite');
// NEGATIVE COINS/INVITE CATEGORY
classifier.addDocument('how many coins do I need', 'not related');
classifier.addDocument('coins are used for', 'not related');
classifier.addDocument('what can I buy with coins', 'not related');
classifier.addDocument('you need to claim invite reward', 'not related');
classifier.addDocument('what is the invite reward', 'not related');
classifier.addDocument('can I invite more friends', 'not related');
classifier.addDocument('how many people can I invite', 'not related');
classifier.addDocument('is there a limit to invites', 'not related');
classifier.addDocument('how many invites are allowed', 'not related');
classifier.addDocument('how to increase invite count', 'not related');
classifier.addDocument('what are the rules for invites', 'not related');
classifier.addDocument('what is the maximum number of invites', 'not related');
classifier.addDocument('can I invite more than ten people', 'not related');
classifier.addDocument('how many friends can I invite', 'not related');
classifier.addDocument('is there an invite limit', 'not related');
classifier.addDocument('what is the invite threshold', 'not related');
classifier.addDocument('how does the invite system work', 'not related');
classifier.addDocument('rules for inviting people', 'not related');
classifier.addDocument('guidelines for inviting friends', 'not related');
classifier.addDocument('how to handle multiple invites', 'not related');
classifier.addDocument('coins', 'not related');
classifier.addDocument('invite', 'not related');
classifier.addDocument('what is coins', 'not related');
classifier.addDocument('tell me about coins', 'not related');
// NOT RELATED CATEGORY \\
classifier.addDocument('how is the weather today', 'not related');
classifier.addDocument('good afternoon', 'not related');
classifier.addDocument('see you later', 'not related');
classifier.addDocument('can you help me with something else', 'not related');
classifier.addDocument('what do you think about this', 'not related');
classifier.addDocument('where are you from', 'not related');
classifier.addDocument('what is your favorite color', 'not related');
classifier.addDocument('tell me a joke', 'not related');
classifier.addDocument('what is your opinion', 'not related');
classifier.addDocument('do you like movies', 'not related');
classifier.addDocument('how old are you', 'not related');
classifier.addDocument('what are your hobbies', 'not related');
classifier.addDocument('where did you go', 'not related');
classifier.addDocument('can you suggest a book', 'not related');
classifier.addDocument('what music do you like', 'not related');
classifier.addDocument('goodbye', 'not related');
classifier.addDocument('what are your plans', 'not related');
classifier.addDocument('how was your day', 'not related');
classifier.addDocument('tell me a story', 'not related');
classifier.addDocument('what is your dream', 'not related');
classifier.addDocument('do you like sports', 'not related');
classifier.addDocument('what is your favorite food', 'not related');
classifier.addDocument('where is the nearest restaurant', 'not related');
classifier.addDocument('do you have a pet', 'not related');
classifier.addDocument('what are you thinking about', 'not related');
classifier.addDocument('what do you do for fun', 'not related');
classifier.addDocument('tell me something interesting', 'not related');
classifier.addDocument('what is your favorite book', 'not related');
classifier.addDocument('how do you spend your weekends', 'not related');
classifier.addDocument('what is your favorite movie', 'not related');
classifier.addDocument('can you recommend a song', 'not related');
classifier.addDocument('what are your interests', 'not related');
classifier.addDocument('how is everything', 'not related');
classifier.addDocument('do you watch TV', 'not related');
classifier.addDocument('what do you like to eat', 'not related');
classifier.addDocument('how is your family', 'not related');
classifier.addDocument('what are your favorite hobbies', 'not related');
classifier.addDocument('what is the time', 'not related');
classifier.addDocument('how do you feel today', 'not related');
classifier.addDocument('do you play video games', 'not related');
classifier.addDocument('what is your job', 'not related');
classifier.addDocument('what do you do for a living', 'not related');
classifier.addDocument('how do you relax', 'not related');
classifier.addDocument('what is your favorite sport', 'not related');
classifier.addDocument('do you have any siblings', 'not related');
classifier.addDocument('what is your favorite season', 'not related');
classifier.addDocument('how was your weekend', 'not related');
classifier.addDocument('where do you live', 'not related');
classifier.addDocument('do you like to travel', 'not related');
classifier.addDocument('what languages do you speak', 'not related');
classifier.addDocument('what is your favorite place', 'not related');
classifier.addDocument('can you tell me about yourself', 'not related');
classifier.addDocument('what are you doing now', 'not related');
classifier.addDocument('do you enjoy reading', 'not related');
classifier.addDocument('where do you work', 'not related');
classifier.addDocument('what is your favorite TV show', 'not related');
classifier.addDocument('do you have any hobbies', 'not related');
classifier.addDocument('how do you spend your free time', 'not related');
classifier.addDocument('what do you think about this situation', 'not related');
classifier.addDocument('what is your favorite game', 'not related');
classifier.addDocument('do you like cooking', 'not related');
classifier.addDocument('what are your thoughts on this', 'not related');
classifier.addDocument('what is your favorite animal', 'not related');
classifier.addDocument('do you like to dance', 'not related');
classifier.addDocument('how do you celebrate holidays', 'not related');
classifier.addDocument('what is your favorite drink', 'not related');
classifier.train();
client.on('ready', () => {
console.log(`Logged in as ${client.user.tag}!`);
});
client.on('messageCreate', async message => {
if (message.channel.id === channelId && !message.author.bot) {
const userMessage = message.content.toLowerCase();
const tokens = tokenizer.tokenize(userMessage);
const normalizedMessage = tokens.join(' ');
const classifications = classifier.getClassifications(normalizedMessage);
const confidence = classifications[0].value;
console.log(userMessage);
console.log(tokens);
console.log(confidence);
console.log(classifications[0].label);
const coinsKeywords = [
'how can I get more coins',
'how to get coins',
'any advice on earning coins',
'tips for getting coins',
'best ways to earn coins',
'methods for obtaining coins',
'how can I gather coins',
'strategies to collect coins',
'what are the techniques to get coins',
'coins',
'claim reward',
'how coins',
'coins get',
'plz coins',
'pls coins'
];
const inviteKeywords = [
'how to claim invite reward',
'claim invite reward',
'can I get an invite reward',
'is there an invite reward',
'steps to claim invite reward',
'redeem invite reward',
'process to get invite reward',
'guide to claim invite reward',
'how do I earn invite reward',
'how can I receive invite reward',
'getting reward for invites',
'can I receive a reward for inviting friends',
'how to get reward for inviting others',
'steps to redeem invite reward',
'how to obtain invite reward',
'invite',
'claim reward',
'plz reward',
'ply invite reward',
'reward get',
'reward invite get',
'invite get',
'how reward',
'how coins'
];
const containsCoinsKeyword = coinsKeywords.some(keyword => userMessage.includes(keyword));
const containsInviteKeyword = inviteKeywords.some(keyword => userMessage.includes(keyword));
const isRelevantContext = (message) => {
const irrelevantPhrases = [
'why do',
'what is',
'whats',
'tell me about',
'explain',
'how does'
];
return !irrelevantPhrases.some(phrase => message.includes(phrase));
};
if (classifications[0].label === 'coins' && confidence > 0.03 && userMessage !== "coins" && containsCoinsKeyword && isRelevantContext(userMessage)) {
const embed = new EmbedBuilder()
.setTitle('How to Get Coins')
.setDescription(`Here are some tips on how to get coins...\nConfidence: ${confidence}`)
.setColor('#00FF00');
const row = new ActionRowBuilder()
.addComponents(
new ButtonBuilder()
.setCustomId('delete')
.setLabel('🗑️ Delete')
.setStyle(ButtonStyle.Danger)
);
message.reply({ embeds: [embed], components: [row] });
} else if (classifications[0].label === 'invite' && confidence > 0.03 && userMessage !== "invite" && containsInviteKeyword && isRelevantContext(userMessage)) {
const embed = new EmbedBuilder()
.setTitle('How to Claim Invite Reward')
.setDescription(`Here are some tips on how to claim invite reward...\nConfidence: ${confidence}`)
.setColor('#00FF00');
const row = new ActionRowBuilder()
.addComponents(
new ButtonBuilder()
.setCustomId('delete')
.setLabel('🗑️ Delete')
.setStyle(ButtonStyle.Danger)
);
message.reply({ embeds: [embed], components: [row] });
}
}
});
client.on('interactionCreate', async interaction => {
if (!interaction.isButton()) return;
if (interaction.customId === 'delete') {
await interaction.message.delete();
await interaction.reply({ content: 'Message deleted', ephemeral: true });
}
});
client.login(''); // Replace with your bot token