Advertisement
Guest User

Blackjack

a guest
Mar 20th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const Discord = require('discord.js');
  2. const fs = require('fs');
  3. const sql = require('sqlite');
  4.  
  5. module.exports.run = async (bot, message, args) => {
  6.     let userdata = JSON.parse(fs.readFileSync('./storage/userdata.json', 'utf-8'));
  7.     let botsettings = JSON.parse(fs.readFileSync('./botsettings.json', 'utf-8'));
  8.     let playerID = message.author.id
  9.     let bet = Number(args[0]);
  10.  
  11.     let gamblingChannel = message.guild.channels.find("name", "casino");
  12.     if (!(message.channel.id == gamblingChannel.id) && !(message.channel.id == message.guild.channels.find("name", "private").id)) {
  13.         return message.channel.send(new Discord.RichEmbed()
  14.         .setAuthor(`${message.member.user.username}#${message.author.discriminator}`, message.member.user.avatarURL)
  15.         .setTitle('🛡 Wrong channel')
  16.         .setDescription(`**Gambling - <#412737324237979650>**`)
  17.         .setColor("#fc2323"));
  18.     }
  19.  
  20.    
  21.     if (!args[0]) {
  22.         return message.channel.send(new Discord.RichEmbed()
  23.         .setAuthor(`${message.member.user.username}#${message.author.discriminator}`, message.member.user.avatarURL)
  24.         .addField("Invalid usage", "!bj `<bet>`")
  25.         .setColor("#fc2323"));
  26.     }
  27.  
  28.     if (bet < 50) {
  29.         return message.channel.send(new Discord.RichEmbed()
  30.         .setAuthor(`${message.member.user.username}#${message.author.discriminator}`, message.member.user.avatarURL)
  31.         .setDescription(`❌ You **must** bet at least ${botsettings.currency}**50**`)
  32.         .setColor("#fc2323"));
  33.     }
  34.  
  35.     sql.get(`SELECT * FROM userdata WHERE userId ="${playerID}"`).then(row => {
  36.         if (bet > row.balance) {
  37.             return message.channel.send(new Discord.RichEmbed()
  38.                 .setAuthor(`${message.member.user.username}#${message.author.discriminator}`, message.member.user.avatarURL)
  39.                 .setDescription(':no_entry_sign: **Insufficient funds**')
  40.                 .setColor("#fc2323")
  41.                 .setFooter(`Current balance: ${row.balance}`))
  42.         }
  43.        
  44.         // BJ Variables
  45.         let deck = new Array();
  46.         let suits = ['♥', '♦', '♠', '♣'];
  47.         let values = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'];
  48.  
  49.         // Creating deck and shuffling it
  50.         (function createDeck() {
  51.             for (var i = 0 ; i < values.length; i++)
  52.             {
  53.                 for(var x = 0; x < suits.length; x++)
  54.                 {
  55.                     let points = parseInt(values[i]);
  56.                     if (values[i] == "J" || values[i] == "Q" || values[i] == "K")
  57.                         points = 10;
  58.                     if (values[i] == "A")
  59.                         points = 11;
  60.                     let card = { value: values[i], suit: suits[x], points: points };
  61.                     deck.push(card);
  62.                 }
  63.             }
  64.         }());
  65.  
  66.         (function shuffle() { // Shuffles the deck automatically
  67.             for (let i = 0; i < 1000; i++)
  68.             {
  69.                 let location1 = Math.floor((Math.random() * deck.length));
  70.                 let location2 = Math.floor((Math.random() * deck.length));
  71.                 let tmp = deck[location1];
  72.                 deck[location1] = deck[location2];
  73.                 deck[location2] = tmp;
  74.             }
  75.         }());
  76.  
  77.         class Player {
  78.             constructor () {
  79.                 this._cards = [];
  80.             }
  81.  
  82.             hit() {
  83.                 let drawCard = deck.shift(); // Example of a card: { value: '4', suit: '♣', points: 4 }
  84.                 this._cards.push(drawCard);
  85.             }
  86.  
  87.             double () {
  88.                 if (row.balance - bet >= bet) {
  89.                     bet *= 2;
  90.                     this.hit();
  91.                 } else {
  92.                     return message.channel.send(new Discord.RichEmbed().setTitle(`Not enough money to double!`));
  93.                 }
  94.             }
  95.  
  96.             get value () {
  97.                 let val = this._cards.reduce((a, b) => Number(a.points) + Number(b.points));        
  98.                 let aces = this._cards.filter(i => i.points === 11).length;
  99.                 while (val > 21 && aces) {
  100.                     val -= 10;
  101.                     aces--;
  102.                 }
  103.                 console.log(this._cards);
  104.                 console.log(val);
  105.                
  106.                
  107.                 return val;
  108.             }
  109.  
  110.             get print () {
  111.                 return this._cards.map((a) => `${a.value}${a.suit}`).join(' ');
  112.             }
  113.         }
  114.  
  115.         // Declaring player and dealer
  116.         let player = new Player();
  117.         let dealer = new Player();
  118.  
  119.         let initalBalance = row.balance;
  120.         //Making a filter for all the available commands once entered a blackjack game
  121.         const filter = m => (m.content.includes('hit') || m.content.includes('double') || m.content.includes('stand')) && m.author.id === message.author.id;
  122.         const collector = message.channel.createMessageCollector(filter);
  123.  
  124.         //To start the game - Player - 2 cards / Dealer - 1
  125.         player.hit();
  126.         player.hit();
  127.         dealer.hit();
  128.         //
  129.        
  130.         sql.run(`UPDATE userdata SET balance = ${Number(row.balance)-Number(bet)} WHERE userId = ${playerID}`);
  131.         (async function() {
  132.             let EmbedObj = new Discord.RichEmbed()
  133.             .setAuthor(`${message.member.user.username}#${message.author.discriminator}`, message.member.user.avatarURL)
  134.             .setDescription('Type `hit` to draw another card, `double` to double down, or `stand` to pass.')
  135.             .addField(`Your hand`, `${player.print}` + `\n\nValue: ${player.value}`, true)
  136.             .addBlankField(true)
  137.             .addField("Dealer hand", `${dealer.print}` + `\n\nValue: ${dealer.value}`, true)
  138.             .setColor("#4286f4");
  139.            
  140.             let start = await message.channel.send(EmbedObj);
  141.            
  142.             if (player.value == 21) {
  143.                 if (dealer.value == 21) {
  144.                     await start.edit("", EmbedObj.setDescription(`:recycle: **DRAW ${botsettings.currency} returned**`).setColor('#f9f400'));
  145.                     sql.run(`UPDATE userdata SET balance = ${initalBalance} WHERE userId = ${playerID}`);;
  146.                     return;
  147.                 }
  148.  
  149.                 await start.edit("", EmbedObj.setDescription(`:b:**BLACKJACK ${botsettings.currency} ${bet * 1.5}**`).setColor('#000000'));
  150.                 sql.run(`UPDATE userdata SET balance = ${Number(row.balance) + Number(bet + (bet*0.5))} WHERE userId = ${playerID}`);
  151.                 return;
  152.             }
  153.            
  154.             // BLUE - #4286f4 - START
  155.             // RED - #f20202 - LOST
  156.             // GREEN - #00f91d - WON
  157.             // YELLOW - #f9f400 - EVEN
  158.            
  159.             collector.on('collect', async m => {
  160.             if (m.content == 'hit') {
  161.                 player.hit();
  162.                 EmbedObj = await new Discord.RichEmbed()
  163.                 .setAuthor(`${message.member.user.username}#${message.author.discriminator}`, message.member.user.avatarURL)
  164.                 .setDescription('Type `hit` to draw another card, `double` to double down, or `stand` to pass.')
  165.                 .addField(`Your hand`, `${player.print}` + `\n\nValue: ${player.value}`, true)
  166.                 .addBlankField(true)
  167.                 .addField("Dealer hand", `${dealer.print}` + `\n\nValue: ${dealer.value}`, true)
  168.                 .setColor("#4286f4");
  169.                 if (player.value > 21) {
  170.                     await start.edit("", EmbedObj.setDescription(`:outbox_tray: **LOST - ${botsettings.currency} ${bet}**`).setColor("#f20202"));
  171.                     collector.stop();
  172.                     return
  173.                 }
  174.                 await start.edit("", EmbedObj.setColor("#4286f4"));
  175.             }
  176.  
  177.             else if (m.content == 'double') {
  178.                
  179.                 player.double();
  180.                 EmbedObj = new Discord.RichEmbed()
  181.                 .setAuthor(`${message.member.user.username}#${message.author.discriminator}`, message.member.user.avatarURL)
  182.                 .setDescription('Type `hit` to draw another card, `double` to double down, or `stand` to pass.')
  183.                 .addField(`Your hand`, `${player.print}` + `\n\nValue: ${player.value}`, true)
  184.                 .addBlankField(true)
  185.                 .addField("Dealer hand", `${dealer.print}` + `\n\nValue: ${dealer.value}`, true)
  186.                 .setColor("#4286f4");
  187.                 if (player.value > 21) { // You busted -- Lost
  188.                     await start.edit("", EmbedObj.setDescription(`:outbox_tray: **LOST - ${botsettings.currency} ${bet}**`).setColor("#f20202"));
  189.                     collector.stop();
  190.                     return;
  191.                 }
  192.                 while ((dealer.value < player.value) && dealer.value <= 22) {
  193.                     dealer.hit();
  194.                 }
  195.  
  196.                 EmbedObj = new Discord.RichEmbed()
  197.                 .setAuthor(`${message.member.user.username}#${message.author.discriminator}`, message.member.user.avatarURL)
  198.                 .setDescription('Type `hit` to draw another card, `double` to double down, or `stand` to pass.')
  199.                 .addField(`Your hand`, `${player.print}` + `\n\nValue: ${player.value}`, true)
  200.                 .addBlankField(true)
  201.                 .addField("Dealer hand", `${dealer.print}` + `\n\nValue: ${dealer.value}`, true)
  202.                 .setColor("#4286f4");
  203.  
  204.                 if (dealer.value > 21) { // Dealer busted - WON
  205.                     await start.edit("", EmbedObj.setDescription(`:inbox_tray: **WON ${botsettings.currency} ${bet}**`).setColor('#00f91d'));
  206.                     sql.run(`UPDATE userdata SET balance = ${Number(row.balance) + Number(bet)} WHERE userId = ${playerID}`);
  207.                     return collector.stop();
  208.                 }
  209.  
  210.                 else if (dealer.value > player.value) { // Lost
  211.                     await start.edit("", EmbedObj.setDescription(`:outbox_tray: **LOST - ${botsettings.currency} ${bet}**`).setColor("#f20202"));
  212.                     sql.run(`UPDATE userdata SET balance = ${Number(row.balance) - Number(bet)} WHERE userId = ${playerID}`);
  213.                     collector.stop();
  214.                     return;
  215.                 }
  216.  
  217.  
  218.                 else if (dealer.value == player.value) { // EVEN
  219.                     await start.edit("", EmbedObj.setDescription(`:recycle: **DRAW ${botsettings.currency} returned**`).setColor('#f9f400'));
  220.                     sql.run(`UPDATE userdata SET balance = ${initalBalance} WHERE userId = ${playerID}`);
  221.                     collector.stop();
  222.                     return;
  223.                 }
  224.                 }
  225.                
  226.            
  227.  
  228.             else if (m.content == 'stand') {
  229.                 while ((dealer.value < player.value) && dealer.value <= 22) {
  230.                     dealer.hit();
  231.                 }
  232.  
  233.                 EmbedObj = new Discord.RichEmbed()
  234.                 .setAuthor(`${message.member.user.username}#${message.author.discriminator}`, message.member.user.avatarURL)
  235.                 .setDescription('Type `hit` to draw another card, `double` to double down, or `stand` to pass.')
  236.                 .addField(`Your hand`, `${player.print}` + `\n\nValue: ${player.value}`, true)
  237.                 .addBlankField(true)
  238.                 .addField("Dealer hand", `${dealer.print}` + `\n\nValue: ${dealer.value}`, true)
  239.                 .setColor("#4286f4");
  240.  
  241.                 if (dealer.value > 21) { // Dealer busted - WON
  242.                     await start.edit("", EmbedObj.setDescription(`:inbox_tray: **WON ${botsettings.currency} ${bet}**`).setColor('#00f91d'));
  243.                     sql.run(`UPDATE userdata SET balance = ${Number(row.balance) + Number(bet)} WHERE userId = ${playerID}`);
  244.                     return collector.stop();
  245.                 }
  246.  
  247.                 else if (dealer.value > player.value) { // Lost
  248.                     await start.edit("", EmbedObj.setDescription(`:outbox_tray: **LOST - ${botsettings.currency} ${bet}**`).setColor("#f20202"));
  249.                     collector.stop();
  250.                     return;
  251.                 }
  252.  
  253.  
  254.                 else if (dealer.value == player.value) { // EVEN
  255.                     await start.edit("", EmbedObj.setDescription(`:recycle: **DRAW ${botsettings.currency} returned**`).setColor('#f9f400'));
  256.                     sql.run(`UPDATE userdata SET balance = ${initalBalance} WHERE userId = ${playerID}`);
  257.                     collector.stop();
  258.                     return;
  259.                 }
  260.             }
  261.  
  262.            
  263.         });
  264.     })();
  265. });    
  266. }
  267.  
  268. module.exports.help = {
  269.     name: 'bj'
  270. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement