mirror of
https://github.com/ION606/selmerBot.git
synced 2026-05-15 05:36:54 +00:00
Added the chat AI feature (limited) and added Stripe payment integration
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
const { MongoClient, ServerApiVersion, ConnectionClosedEvent } = require('mongodb');
|
||||
const { exit } = require('process');
|
||||
const { checkResponses } = require('./wordlist.js');
|
||||
|
||||
|
||||
async function getResponse(convo, bot) {
|
||||
@@ -45,6 +46,11 @@ async function convoManager(clientinp, bot, message) {
|
||||
const doc = docs[0];
|
||||
if (!doc) { return message.reply('You aren\'t currently in a conversation\nUse _!startconvo_ to start one!'); }
|
||||
|
||||
//Checking Section
|
||||
const check = checkResponses(message.content, "I'm sorry, I can't do that");
|
||||
if (check != null) { return message.reply(check); }
|
||||
|
||||
|
||||
let convo = doc.convo;
|
||||
convo += `\nHuman: ${message.content}\n`;;
|
||||
|
||||
@@ -62,6 +68,7 @@ async function convoManager(clientinp, bot, message) {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
//"Hello! discord_user:"
|
||||
module.exports = {
|
||||
name: 'chat',
|
||||
|
||||
@@ -0,0 +1,175 @@
|
||||
/*
|
||||
-----WEBHOOKS ARE RECIEVED AND MONITORED HERE-----
|
||||
https://glitch.com/edit/#!/selmer-bot-listener
|
||||
--------------------------------------------------
|
||||
*/
|
||||
|
||||
const { MongoClient, ServerApiVersion } = require('mongodb');
|
||||
const { MessageActionRow, MessageSelectMenu } = require('discord.js');
|
||||
|
||||
|
||||
//Called from the dropdown menu
|
||||
async function createSubscriptionManual(bot, interaction, id, priceID) {
|
||||
const stripe = bot.stripe;
|
||||
const mongouri = bot.mongouri;
|
||||
|
||||
//Start Error Checking
|
||||
if (!id) { console.log('....What? How?'); return interaction.editReply("Uh oh, something happened with the Stripe Discord ID check, please contact support!"); }
|
||||
|
||||
const client = new MongoClient(mongouri, { useNewUrlParser: true, useUnifiedTopology: true, serverApi: ServerApiVersion.v1 });
|
||||
new Promise(async function(resolve, reject) {
|
||||
client.connect(async (err) => {
|
||||
if (err) { return console.log(err); }
|
||||
|
||||
const dbo = client.db('main').collection('authorized');
|
||||
await dbo.findOne({'discordID': id}).then(async (doc) => {
|
||||
var userID;
|
||||
|
||||
if (doc != undefined) {
|
||||
client.close();
|
||||
|
||||
reject(`An account with the tag <@${id}> already exists!`);
|
||||
} else {
|
||||
const stripeUser = await stripe.customers.create({
|
||||
metadata: { 'discordID': id }
|
||||
});
|
||||
userID = stripeUser.id;
|
||||
|
||||
//Add to the database (I have to wait for the insertion)
|
||||
await dbo.insertOne({stripeID: userID, discordID: id, paid: false, startDateUTC: null, tier: 0}).then(() => { client.close(); resolve(userID); });
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
}).then(async (userID) => {
|
||||
|
||||
//Deal with the session
|
||||
const billingPortalSession = await stripe.billingPortal.sessions.create({
|
||||
customer: userID,
|
||||
return_url: "https://linktr.ee/selmerbot",
|
||||
});
|
||||
|
||||
|
||||
const session = await stripe.checkout.sessions.create(
|
||||
{
|
||||
payment_method_types: ["card"],
|
||||
line_items: [
|
||||
{
|
||||
price: priceID,
|
||||
quantity: 1,
|
||||
},
|
||||
],
|
||||
customer: userID,
|
||||
mode: "subscription",
|
||||
success_url: billingPortalSession.url,
|
||||
cancel_url: "https://linktr.ee/selmerbot"
|
||||
});
|
||||
|
||||
interaction.editReply(session.url);
|
||||
}).catch((err) => { interaction.editReply(err); })
|
||||
}
|
||||
|
||||
|
||||
async function changeSubscriptionManual(bot, message) {
|
||||
const stripe = bot.stripe;
|
||||
const mongouri = bot.mongouri;
|
||||
const id = message.author.id;
|
||||
|
||||
//Start Error Checking
|
||||
if (!id) { return console.log('....What? How?'); }
|
||||
|
||||
const client = new MongoClient(mongouri, { useNewUrlParser: true, useUnifiedTopology: true, serverApi: ServerApiVersion.v1 });
|
||||
new Promise(async function(resolve, reject) {
|
||||
client.connect(async (err) => {
|
||||
if (err) { return console.log(err); }
|
||||
|
||||
const dbo = client.db('main').collection('authorized');
|
||||
await dbo.findOne({'discordID': id}).then(async (doc) => {
|
||||
var userID;
|
||||
|
||||
if (doc != undefined) {
|
||||
userID = doc.stripeID;
|
||||
client.close();
|
||||
resolve(userID);
|
||||
} else {
|
||||
client.close();
|
||||
|
||||
reject(`No user with the ID of <@${message.author.id}>`);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
}).then(async (userID) => {
|
||||
const session = await stripe.billingPortal.sessions.create({
|
||||
customer: userID,
|
||||
return_url: "https://linktr.ee/selmerbot",
|
||||
});
|
||||
message.reply(session.url);
|
||||
// console.log(session.url);
|
||||
}).catch((err) => {
|
||||
message.reply(err);
|
||||
// console.log(err);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function createDropDown(bot, message) {
|
||||
// const stripe = bot.stripe;
|
||||
|
||||
const stripe = bot.stripe;
|
||||
|
||||
const pl = [];
|
||||
const vl = [];
|
||||
stripe.products.list({
|
||||
limit: 3,
|
||||
}).then((prod) => {
|
||||
prod.data.forEach((obj) => {
|
||||
const pricePromise = stripe.prices.retrieve(obj.default_price);
|
||||
var newObj = {label: obj.name, description: null, value: `${obj.default_price}`}
|
||||
pl.push(pricePromise);
|
||||
vl.push(newObj);
|
||||
});
|
||||
|
||||
let n = Promise.all(pl);
|
||||
let i = 0;
|
||||
n.then((t) => {
|
||||
t.forEach(data => {
|
||||
let price = data.unit_amount/100;
|
||||
vl[i].description = `The $${price} tier`;
|
||||
i++;
|
||||
});
|
||||
|
||||
|
||||
const row = new MessageActionRow()
|
||||
.addComponents(
|
||||
new MessageSelectMenu()
|
||||
.setCustomId(`${message.author.id}|premium`)
|
||||
.setPlaceholder('Nothing selected')
|
||||
.addOptions(vl)
|
||||
);
|
||||
|
||||
message.channel.send({ content: `Please choose a tier`, components: [row] });
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function handleInp(bot, message) {
|
||||
if (message.content == '!premium help') {
|
||||
message.reply('Use _!premium buy_ to get premium or use _!premium manage_ to change or cancel your subscription\n_Disclaimer: Selmer Bot uses Stripe to manage payments. Read more at *https://stripe.com/ *_');
|
||||
} else if (message.content == '!premium buy') {
|
||||
createDropDown(bot, message);
|
||||
} else if (message.content == '!premium manage') {
|
||||
changeSubscriptionManual(bot, message)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
module.exports = {
|
||||
name: 'premium',
|
||||
description: 'everything payment',
|
||||
execute(message, args, Discord, Client, bot) {
|
||||
message.reply("Please DM Selmer bot to use this command!");
|
||||
}, handleInp, createSubscriptionManual
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
//Remember to strip all non-alpha chars from string (including ' )
|
||||
|
||||
wordlist = {
|
||||
pay: ['pay me', 'give me money', 'send money', 'send me money', 'send cash', 'PayPal me', 'venmo me', 'cashapp me', 'cash app me'],
|
||||
name: ['what is your name', 'whats your name', 'what are you called']
|
||||
}
|
||||
|
||||
|
||||
function checkResponses(convoOG, answer) {
|
||||
if (answer.indexOf("I'm sorry, I can't do that") == -1) { console.log('what?'); return 'none'}
|
||||
// remove all uneccesary chars
|
||||
convo = convoOG.replace(/\W/g, ' ').toLowerCase();
|
||||
|
||||
var b = 'none';
|
||||
wordlist.name.forEach((w) => { if (convo.includes(w)) { b = 'name'; return }})
|
||||
wordlist.pay.forEach((w) => { if (convo.includes(w)) { b = 'pay'; return }})
|
||||
|
||||
if (b === 'pay') {
|
||||
//Exctract the number
|
||||
var amt = convoOG.match(/(\d+)/)[0];
|
||||
|
||||
|
||||
if (matches) {
|
||||
currency = convoOG[convoOG.indexOf(amt) - 1];
|
||||
//Do something with pay API to get the amount here
|
||||
}
|
||||
} else if (b == 'name') {
|
||||
return 'My name is Selmer Bot!';
|
||||
} else { return null; }
|
||||
|
||||
return b;
|
||||
}
|
||||
|
||||
module.exports = { checkResponses }
|
||||
Reference in New Issue
Block a user