Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const Discord = require('discord.js');
- const fs = require('fs');
- const sql = require('sqlite');
- module.exports.run = async (bot, message, args) => {
- let userdata = JSON.parse(fs.readFileSync('./storage/userdata.json', 'utf-8'));
- let botsettings = JSON.parse(fs.readFileSync('./botsettings.json', 'utf-8'));
- let playerID = message.author.id
- let bet = Number(args[0]);
- let gamblingChannel = message.guild.channels.find("name", "casino");
- if (!(message.channel.id == gamblingChannel.id) && !(message.channel.id == message.guild.channels.find("name", "private").id)) {
- return message.channel.send(new Discord.RichEmbed()
- .setAuthor(`${message.member.user.username}#${message.author.discriminator}`, message.member.user.avatarURL)
- .setTitle('🛡 Wrong channel')
- .setDescription(`**Gambling - <#412737324237979650>**`)
- .setColor("#fc2323"));
- }
- if (!args[0]) {
- return message.channel.send(new Discord.RichEmbed()
- .setAuthor(`${message.member.user.username}#${message.author.discriminator}`, message.member.user.avatarURL)
- .addField("Invalid usage", "!bj `<bet>`")
- .setColor("#fc2323"));
- }
- if (bet < 50) {
- return message.channel.send(new Discord.RichEmbed()
- .setAuthor(`${message.member.user.username}#${message.author.discriminator}`, message.member.user.avatarURL)
- .setDescription(`❌ You **must** bet at least ${botsettings.currency}**50**`)
- .setColor("#fc2323"));
- }
- sql.get(`SELECT * FROM userdata WHERE userId ="${playerID}"`).then(row => {
- if (bet > row.balance) {
- return message.channel.send(new Discord.RichEmbed()
- .setAuthor(`${message.member.user.username}#${message.author.discriminator}`, message.member.user.avatarURL)
- .setDescription(':no_entry_sign: **Insufficient funds**')
- .setColor("#fc2323")
- .setFooter(`Current balance: ${row.balance}`))
- }
- // BJ Variables
- let deck = new Array();
- let suits = ['♥', '♦', '♠', '♣'];
- let values = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'];
- // Creating deck and shuffling it
- (function createDeck() {
- for (var i = 0 ; i < values.length; i++)
- {
- for(var x = 0; x < suits.length; x++)
- {
- let points = parseInt(values[i]);
- if (values[i] == "J" || values[i] == "Q" || values[i] == "K")
- points = 10;
- if (values[i] == "A")
- points = 11;
- let card = { value: values[i], suit: suits[x], points: points };
- deck.push(card);
- }
- }
- }());
- (function shuffle() { // Shuffles the deck automatically
- for (let i = 0; i < 1000; i++)
- {
- let location1 = Math.floor((Math.random() * deck.length));
- let location2 = Math.floor((Math.random() * deck.length));
- let tmp = deck[location1];
- deck[location1] = deck[location2];
- deck[location2] = tmp;
- }
- }());
- class Player {
- constructor () {
- this._cards = [];
- }
- hit() {
- let drawCard = deck.shift(); // Example of a card: { value: '4', suit: '♣', points: 4 }
- this._cards.push(drawCard);
- }
- double () {
- if (row.balance - bet >= bet) {
- bet *= 2;
- this.hit();
- } else {
- return message.channel.send(new Discord.RichEmbed().setTitle(`Not enough money to double!`));
- }
- }
- get value () {
- let val = this._cards.reduce((a, b) => Number(a.points) + Number(b.points));
- let aces = this._cards.filter(i => i.points === 11).length;
- while (val > 21 && aces) {
- val -= 10;
- aces--;
- }
- console.log(this._cards);
- console.log(val);
- return val;
- }
- get print () {
- return this._cards.map((a) => `${a.value}${a.suit}`).join(' ');
- }
- }
- // Declaring player and dealer
- let player = new Player();
- let dealer = new Player();
- let initalBalance = row.balance;
- //Making a filter for all the available commands once entered a blackjack game
- const filter = m => (m.content.includes('hit') || m.content.includes('double') || m.content.includes('stand')) && m.author.id === message.author.id;
- const collector = message.channel.createMessageCollector(filter);
- //To start the game - Player - 2 cards / Dealer - 1
- player.hit();
- player.hit();
- dealer.hit();
- //
- sql.run(`UPDATE userdata SET balance = ${Number(row.balance)-Number(bet)} WHERE userId = ${playerID}`);
- (async function() {
- let EmbedObj = new Discord.RichEmbed()
- .setAuthor(`${message.member.user.username}#${message.author.discriminator}`, message.member.user.avatarURL)
- .setDescription('Type `hit` to draw another card, `double` to double down, or `stand` to pass.')
- .addField(`Your hand`, `${player.print}` + `\n\nValue: ${player.value}`, true)
- .addBlankField(true)
- .addField("Dealer hand", `${dealer.print}` + `\n\nValue: ${dealer.value}`, true)
- .setColor("#4286f4");
- let start = await message.channel.send(EmbedObj);
- if (player.value == 21) {
- if (dealer.value == 21) {
- await start.edit("", EmbedObj.setDescription(`:recycle: **DRAW ${botsettings.currency} returned**`).setColor('#f9f400'));
- sql.run(`UPDATE userdata SET balance = ${initalBalance} WHERE userId = ${playerID}`);;
- return;
- }
- await start.edit("", EmbedObj.setDescription(`:b:**BLACKJACK ${botsettings.currency} ${bet * 1.5}**`).setColor('#000000'));
- sql.run(`UPDATE userdata SET balance = ${Number(row.balance) + Number(bet + (bet*0.5))} WHERE userId = ${playerID}`);
- return;
- }
- // BLUE - #4286f4 - START
- // RED - #f20202 - LOST
- // GREEN - #00f91d - WON
- // YELLOW - #f9f400 - EVEN
- collector.on('collect', async m => {
- if (m.content == 'hit') {
- player.hit();
- EmbedObj = await new Discord.RichEmbed()
- .setAuthor(`${message.member.user.username}#${message.author.discriminator}`, message.member.user.avatarURL)
- .setDescription('Type `hit` to draw another card, `double` to double down, or `stand` to pass.')
- .addField(`Your hand`, `${player.print}` + `\n\nValue: ${player.value}`, true)
- .addBlankField(true)
- .addField("Dealer hand", `${dealer.print}` + `\n\nValue: ${dealer.value}`, true)
- .setColor("#4286f4");
- if (player.value > 21) {
- await start.edit("", EmbedObj.setDescription(`:outbox_tray: **LOST - ${botsettings.currency} ${bet}**`).setColor("#f20202"));
- collector.stop();
- return
- }
- await start.edit("", EmbedObj.setColor("#4286f4"));
- }
- else if (m.content == 'double') {
- player.double();
- EmbedObj = new Discord.RichEmbed()
- .setAuthor(`${message.member.user.username}#${message.author.discriminator}`, message.member.user.avatarURL)
- .setDescription('Type `hit` to draw another card, `double` to double down, or `stand` to pass.')
- .addField(`Your hand`, `${player.print}` + `\n\nValue: ${player.value}`, true)
- .addBlankField(true)
- .addField("Dealer hand", `${dealer.print}` + `\n\nValue: ${dealer.value}`, true)
- .setColor("#4286f4");
- if (player.value > 21) { // You busted -- Lost
- await start.edit("", EmbedObj.setDescription(`:outbox_tray: **LOST - ${botsettings.currency} ${bet}**`).setColor("#f20202"));
- collector.stop();
- return;
- }
- while ((dealer.value < player.value) && dealer.value <= 22) {
- dealer.hit();
- }
- EmbedObj = new Discord.RichEmbed()
- .setAuthor(`${message.member.user.username}#${message.author.discriminator}`, message.member.user.avatarURL)
- .setDescription('Type `hit` to draw another card, `double` to double down, or `stand` to pass.')
- .addField(`Your hand`, `${player.print}` + `\n\nValue: ${player.value}`, true)
- .addBlankField(true)
- .addField("Dealer hand", `${dealer.print}` + `\n\nValue: ${dealer.value}`, true)
- .setColor("#4286f4");
- if (dealer.value > 21) { // Dealer busted - WON
- await start.edit("", EmbedObj.setDescription(`:inbox_tray: **WON ${botsettings.currency} ${bet}**`).setColor('#00f91d'));
- sql.run(`UPDATE userdata SET balance = ${Number(row.balance) + Number(bet)} WHERE userId = ${playerID}`);
- return collector.stop();
- }
- else if (dealer.value > player.value) { // Lost
- await start.edit("", EmbedObj.setDescription(`:outbox_tray: **LOST - ${botsettings.currency} ${bet}**`).setColor("#f20202"));
- sql.run(`UPDATE userdata SET balance = ${Number(row.balance) - Number(bet)} WHERE userId = ${playerID}`);
- collector.stop();
- return;
- }
- else if (dealer.value == player.value) { // EVEN
- await start.edit("", EmbedObj.setDescription(`:recycle: **DRAW ${botsettings.currency} returned**`).setColor('#f9f400'));
- sql.run(`UPDATE userdata SET balance = ${initalBalance} WHERE userId = ${playerID}`);
- collector.stop();
- return;
- }
- }
- else if (m.content == 'stand') {
- while ((dealer.value < player.value) && dealer.value <= 22) {
- dealer.hit();
- }
- EmbedObj = new Discord.RichEmbed()
- .setAuthor(`${message.member.user.username}#${message.author.discriminator}`, message.member.user.avatarURL)
- .setDescription('Type `hit` to draw another card, `double` to double down, or `stand` to pass.')
- .addField(`Your hand`, `${player.print}` + `\n\nValue: ${player.value}`, true)
- .addBlankField(true)
- .addField("Dealer hand", `${dealer.print}` + `\n\nValue: ${dealer.value}`, true)
- .setColor("#4286f4");
- if (dealer.value > 21) { // Dealer busted - WON
- await start.edit("", EmbedObj.setDescription(`:inbox_tray: **WON ${botsettings.currency} ${bet}**`).setColor('#00f91d'));
- sql.run(`UPDATE userdata SET balance = ${Number(row.balance) + Number(bet)} WHERE userId = ${playerID}`);
- return collector.stop();
- }
- else if (dealer.value > player.value) { // Lost
- await start.edit("", EmbedObj.setDescription(`:outbox_tray: **LOST - ${botsettings.currency} ${bet}**`).setColor("#f20202"));
- collector.stop();
- return;
- }
- else if (dealer.value == player.value) { // EVEN
- await start.edit("", EmbedObj.setDescription(`:recycle: **DRAW ${botsettings.currency} returned**`).setColor('#f9f400'));
- sql.run(`UPDATE userdata SET balance = ${initalBalance} WHERE userId = ${playerID}`);
- collector.stop();
- return;
- }
- }
- });
- })();
- });
- }
- module.exports.help = {
- name: 'bj'
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement