Advertisement
Guest User

Untitled

a guest
Jan 27th, 2020
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const { RichEmbed } = require("discord.js");
  2. const { stripIndents } = require("common-tags");
  3. const { client } = require("../../index.js");
  4. const cdsys = require("../../database/cooldowndb/cooldownsys.js");
  5. const balsys = require("../../database/currencydb/currencysys.js");
  6. const bd = require("../../utils/botDelete.js")
  7.  
  8. // CARDS
  9. let gameloaded = false;
  10. let hitemote;
  11. let standemote;
  12. let doubledownemote;
  13.  
  14. function loadgame() {
  15.     gameloaded = true;
  16.     hitemote = client.emojis.find(e=>e.name==="hitreact");
  17.     standemote = client.emojis.find(e=>e.name==="standreact");
  18.     doubledownemote = client.emojis.find(e=>e.name==="doubledownreact");
  19.     console.log(hitemote.id);
  20.     console.log(standemote.id);
  21.     console.log(doubledownemote.id);
  22. }
  23.  
  24. const backcard = `BackCard`;
  25.  
  26. let shoe = [];
  27. let maxshoes = 4;
  28. const cards = [
  29.     `AC`, `AS`, `AD`, `AH`,
  30.     `2C`, `2S`, `2D`, `2H`,
  31.     `3C`, `3S`, `3D`, `3H`,
  32.     `4C`, `4S`, `4D`, `4H`,
  33.     `5C`, `5S`, `5D`, `5H`,
  34.     `6C`, `6S`, `6D`, `6H`,
  35.     `7C`, `7S`, `7D`, `7H`,
  36.     `8C`, `8S`, `8D`, `8H`,
  37.     `9C`, `9S`, `9D`, `9H`,
  38.     `10C`, `10S`, `10D`, `10H`,
  39.     `JC`, `JS`, `JD`, `JH`,
  40.     `QC`, `QS`, `QD`, `QH`,
  41.     `KC`, `KS`, `KD`, `KH`,
  42. ]
  43.  
  44. function resetShoe() {
  45.     shoe = [];
  46.     for (let i=0;i<maxshoes;i++) {
  47.         shoe = shoe.concat(cards);
  48.     }
  49. }
  50.  
  51. function checkShoeLength() {
  52.     if(shoe.length <= ((52*maxshoes)*0.4)) {
  53.         resetShoe();
  54.     }
  55. }
  56. // Game functions
  57.  
  58. // game.23758275025235235 = {
  59. //      userid: 4738573405734,
  60. //      messageid: 48590348609342,
  61. //      channelid: 74385760834267,
  62. //      deck: [],
  63. //      playerHand: [],
  64. //      dealerHand: [],
  65. //      bet: 1000
  66. // }
  67. const games = {};
  68.  
  69. function isInGame(userid) {
  70.     if (games[`${userid}`] != undefined) return true;
  71.     return false;
  72. }
  73.  
  74. function getGame(userid) {
  75.     return games[`${userid}`];
  76. }
  77.  
  78. function deleteGame(userid) {
  79.     delete games[`${userid}`];
  80. }
  81.  
  82. function doubledown(userid) {
  83.     let game = games[`${userid}`];
  84.     game.bet = game.bet*2;
  85.     games[`${userid}`] = game;
  86. }
  87.  
  88. function hitHand(userid, type) {
  89.     let game = games[`${userid}`];
  90.     let hand;
  91.     let esp = ``;
  92.     if (type == "player") {
  93.         hand = game.playerHand;
  94.         esp = `p`;
  95.     } else if (type == "dealer") {
  96.         hand = game.dealerHand;
  97.         esp = `d`;
  98.     }
  99.     let num = Math.floor(Math.random() * shoe.length);
  100.     let cardary = shoe.splice(num, 1);
  101.     let emoji = client.emojis.find(e=>e.name === cardary[0])
  102.     if (esp == "d" && cardToNum(cardary[0], esp) > 7) {
  103.         let num2 = Math.floor(Math.random() * shoe.length);
  104.         let cardary2 = shoe.splice(num2, 1);
  105.         let emoji2 = client.emojis.find(e=>e.name === cardary2[0])
  106.         hand.push({
  107.             card: emoji2,
  108.             num: cardToNum(cardary2[0], esp)
  109.         })
  110.     } else {
  111.         hand.push({
  112.             card: emoji,
  113.             num: cardToNum(cardary[0], esp)
  114.         })
  115.     }
  116.  
  117.     if (type == "player") {
  118.         game.playerHand = hand;
  119.     } else if (type == "dealer") {
  120.         game.dealerHand = hand;
  121.     }
  122.  
  123.     games[`${userid}`] = game;
  124.     return games[`${userid}`];
  125. }
  126.  
  127. function createGame(userid, messageid, channelid, bet) {
  128.     let playerHand = [];
  129.     for (let i=0;i<2;i++) {
  130.         let num = Math.floor(Math.random() * shoe.length);
  131.         let cardary = shoe.splice(num, 1);
  132.         let emoji = client.emojis.find(e=>e.name === cardary[0])
  133.         playerHand.push({
  134.             card: emoji,
  135.             num: cardToNum(cardary[0], "p")
  136.         })
  137.     }
  138.  
  139.     let dealerHand = [];
  140.     for (let i=0;i<2;i++) {
  141.         let num = Math.floor(Math.random() * shoe.length);
  142.         let cardary = shoe.splice(num, 1);
  143.         let emoji = client.emojis.find(e=>e.name === cardary[0])
  144.         dealerHand.push({
  145.             card: emoji,
  146.             num: cardToNum(cardary[0], "d")
  147.         })
  148.     }
  149.  
  150.     games[`${userid}`] = {
  151.         userid:userid,
  152.         messageid:messageid,
  153.         channelid:channelid,
  154.         playerHand:playerHand,
  155.         dealerHand:dealerHand,
  156.         bet:bet
  157.     }
  158.  
  159.     return games[`${userid}`];
  160. }
  161.  
  162. function cardToNum(card, type) {
  163.     for (let i=0;i<10;i++) {
  164.         if ((i+1) == 1) continue;
  165.         if (card.startsWith(`${i+1}`)) return i+1;
  166.     }
  167.     if (card.startsWith(`J`)) return 10;
  168.     if (card.startsWith(`Q`)) return 10;
  169.     if (card.startsWith(`K`)) return 10;
  170.     if (card.startsWith(`A`)) {
  171.         if (type == "p") {
  172.             return `ace`;
  173.         } else if (type == "d") {
  174.             return 11;
  175.         }
  176.     }
  177. }
  178.  
  179. module.exports = {
  180.     name: "blackjack",
  181.     aliases: ["bj", "blackj", "bjack"],
  182.     category: "gambling",
  183.     description: "starts a game of blackjack",
  184.     usage: "<betamt|all>",
  185.     run: async (client, message, args) => {
  186.         const embed = new RichEmbed()
  187.             .setAuthor("Blackjack:", client.user.displayAvatarURL)
  188.             .setColor(message.member.displayHexColor === "#000000" ? "#ffffff" : message.member.displayHexColor)
  189.  
  190.         let userid = message.author.id;
  191.         if (args.length != 1) return message.channel.send(embed.setDescription(`Correct usage: \n\`.blackjack <betamt|all>\``))
  192.         if (isInGame(userid)) return message.channel.send(embed.setDescription(`You're already in a game`))
  193.  
  194.        if (cdsys.getGambleCooldown(userid) != true) return message.channel.send(embed.setDescription(`You cant gamble again for another: ${cdsys.getGambleCooldown(userid)}`));
  195.  
  196.        if (gameloaded == false) {
  197.            loadgame();
  198.        }
  199.        if(shoe.length <= 1) {
  200.            resetShoe();
  201.        }
  202.  
  203.        let betamt = 0;
  204.        let wallet = 0;
  205.        if (args[0] == "all") {
  206.            betamt = balsys.getCurrency(userid, "wallet");
  207.            if (betamt < 500) return message.channel.send(embed.setDescription(`Minimum bet: 🤡 500`))
  208.            wallet = balsys.getCurrency(userid, "wallet");
  209.        } else if (!isNaN(args[0])){
  210.            betamt = parseInt(args[0], 10);
  211.            if (betamt < 500) return message.channel.send(embed.setDescription(`Minimum bet: 🤡 500`))
  212.            wallet = balsys.getCurrency(userid, "wallet");
  213.            if (wallet < betamt) return message.channel.send(embed.setDescription(`You dont have enough money in your wallet for that 😢`))
  214.        } else {
  215.            return message.channel.send(embed.setDescription(`Not a number 😢`))
  216.        }
  217.  
  218.        balsys.setCurrency(userid, (wallet - betamt), "wallet");
  219.        cdsys.addGambleCooldown(userid);
  220.        message.channel.send("Starting Game..\nuse \`update\` if game doesnt load").then(async message=> {
  221.            let messageid = message.id;
  222.            let channelid = message.channel.id;
  223.  
  224.            await message.react(hitemote);
  225.            await message.react(standemote);
  226.            await message.react(doubledownemote);
  227.  
  228.            let game = createGame(userid, messageid, channelid, betamt);
  229.            let playerHandS = returnHandString(game.playerHand, "player");
  230.            let dealerHandS = returnHandString(game.dealerHand, "dealer");
  231.            if (playerHandS.num == 21) {
  232.                // win
  233.                win(game);
  234.                return;
  235.            } else if (playerHandS.num > 21) {
  236.                // loss
  237.                loss(game);
  238.                return;
  239.            }
  240.            if (dealerHandS.hiddennum == 21) {
  241.                // loss
  242.                loss(game);
  243.                return;
  244.            } else if (dealerHandS.hiddennum > 21) {
  245.                // win
  246.                win(game);
  247.                return;
  248.            }
  249.            update(game);
  250.        })
  251.    }
  252. }
  253.  
  254. client.on("messageReactionAdd", async (reaction, user) => {
  255.    if (user.bot) return;
  256.    let message = reaction.message;
  257.    if (!message.guild) return;
  258.    if (message.guild.id != client.clowncafe.id) return;
  259.    let userid = user.id;
  260.    if (!isInGame(userid)) return;
  261.    let remote = reaction.emoji;
  262.  
  263.    if (remote.id == hitemote.id) {
  264.        // hit
  265.        reaction.remove(user)
  266.        let game = hitHand(userid, "player");
  267.        let playerHandS = returnHandString(game.playerHand, "player");
  268.        if (playerHandS.num > 21) {
  269.            // loss
  270.            loss(game);
  271.            return;
  272.        } else if (playerHandS.num == 21) {
  273.            // win
  274.            let dealerHandS = returnHandString(game.dealerHand, "dealer");
  275.            if (dealerHandS.hiddennum < 17) {
  276.                let is17 = false;
  277.                while(!is17) {
  278.                    game = hitHand(userid, "dealer")
  279.                    dealerHandS = returnHandString(game.dealerHand, "dealer");
  280.                    if (dealerHandS.hiddennum >= 17) {
  281.                        is17 = true;
  282.                    }
  283.                }
  284.            }
  285.            if (playerHandS.num == dealerHandS.hiddennum) {
  286.                draw(game);
  287.            } else {
  288.                win(game);
  289.            }
  290.            return;
  291.        }
  292.        update(game);
  293.    } else if (remote.id == standemote.id) {
  294.        // stand
  295.        reaction.remove(user)
  296.        let game = getGame(userid);
  297.        let playerHandS = returnHandString(game.playerHand, "player");
  298.        let dealerHandS = returnHandString(game.dealerHand, "dealer");
  299.        if (dealerHandS.hiddennum < 17) {
  300.            let is17 = false;
  301.            while(!is17) {
  302.                game = hitHand(userid, "dealer")
  303.                dealerHandS = returnHandString(game.dealerHand, "dealer");
  304.                if (dealerHandS.hiddennum >= 17) {
  305.                    is17 = true;
  306.                }
  307.            }
  308.        }
  309.  
  310.        if (dealerHandS.hiddennum == 21) {
  311.            // loss
  312.            if (playerHandS.num == dealerHandS.hiddennum) {
  313.                draw(game);
  314.            }
  315.            loss(game);
  316.            return;
  317.        } else if (dealerHandS.hiddennum > 21) {
  318.            // win
  319.            win(game);
  320.            return;
  321.        } else {
  322.            if (playerHandS.num > dealerHandS.hiddennum) {
  323.                //win
  324.                win(game);
  325.                return;
  326.            } else if (playerHandS.num == dealerHandS.hiddennum) {
  327.                draw(game);
  328.                return;
  329.            } else if (playerHandS.num < dealerHandS.hiddennum) {
  330.                loss(game);
  331.                return;
  332.            }
  333.        }
  334.    } else if (remote.id == doubledownemote.id) {
  335.        // doubledown
  336.        let wallet = balsys.getCurrency(userid, "wallet");
  337.        let game = getGame(userid);
  338.        let gamebet = game.bet;
  339.        if (wallet < gamebet) return message.channel.send(`You dont have enough 🤡 in your wallet`).then(m=>bd.botDelete(m,3000));
  340.        doubledown(userid);
  341.        balsys.setCurrency(userid, wallet-gamebet, "wallet");
  342.        game = hitHand(userid, "player");
  343.        let playerHandS = returnHandString(game.playerHand, "player");
  344.        if (playerHandS.num > 21) {
  345.            // loss
  346.            loss(game);
  347.            return;
  348.        }
  349.        let dealerHandS = returnHandString(game.dealerHand, "dealer");
  350.        if (dealerHandS.hiddennum < 17) {
  351.            let is17 = false;
  352.            while(!is17) {
  353.                game = hitHand(userid, "dealer")
  354.                dealerHandS = returnHandString(game.dealerHand, "dealer");
  355.                if (dealerHandS.hiddennum >= 17) {
  356.                    is17 = true;
  357.                }
  358.            }
  359.        }
  360.        if (dealerHandS.hiddennum > 21) {
  361.            // win
  362.            win(game);
  363.            return;
  364.        } else if (playerHandS.num == 21) {
  365.            // win
  366.            if (playerHandS.num == dealerHandS.hiddennum) {
  367.                draw(game);
  368.            } else {
  369.                win(game);
  370.            }
  371.            return;
  372.        } else if (dealerHandS.hiddennum == 21) {
  373.            // loss
  374.            if (playerHandS.num == dealerHandS.hiddennum) {
  375.                draw(game);
  376.            }
  377.            loss(game);
  378.            return;
  379.        } else {
  380.            dealerHandS = returnHandString(game.dealerHand, "dealer");
  381.            if (playerHandS.num > dealerHandS.hiddennum) {
  382.                win(game);
  383.                return;
  384.            } else if (playerHandS.num == dealerHandS.hiddennum) {
  385.                draw(game);
  386.                return;
  387.            } else if (playerHandS.num < dealerHandS.hiddennum) {
  388.                loss(game);
  389.                return;
  390.            }
  391.        }
  392.    } else {
  393.        reaction.remove(user)
  394.    }
  395. });
  396.  
  397. client.on("message", async message => {
  398.    if (!message.guild) return;
  399.    if (message.guild.id != client.clowncafe.id) return;
  400.    if (message.author.bot) return;
  401.    let userid = message.author.id;
  402.    if (!isInGame(userid)) return;
  403.    if (message.content.length < 1) return;
  404.    let arg = message.content;
  405.    if (arg == "update") {
  406.        let game = getGame(userid);
  407.        update(game);
  408.    }
  409. });
  410.  
  411. function returnHandString(hand, type) {
  412.    let text = ``;
  413.    let num = 0;
  414.    if (type == "player") {
  415.        let aces = [];
  416.        let soft = ` `;
  417.        for (let i=0;i<hand.length;i++) {
  418.            text = text + `${hand[i].card} `
  419.            if (hand[i].num == `ace`) {
  420.                aces.push(hand[i])
  421.            } else {
  422.                num += hand[i].num;
  423.            }
  424.        }
  425.        if (aces.length > 0) {
  426.            for (let i=0; i<aces.length;i++) {
  427.                if ((num + (11+((aces.length-i)-1))) <= 21) {
  428.                    soft = `Soft `
  429.                    num += 11;
  430.                } else {
  431.                    num += 1;
  432.                }
  433.            }
  434.        }
  435.        return {"string":text, num:num, soft:soft};
  436.    } else if (type == "dealer") {
  437.        let hiddentext = ``;
  438.        let hiddennum = 0;
  439.        for (let i=0;i<hand.length;i++) {
  440.            if (i < 1) {
  441.                text = text + `${hand[i].card} `
  442.                hiddentext = hiddentext + `${hand[i].card} `
  443.                if (hand[i].num == `ace`) {
  444.                    num += 11;
  445.                    hiddennum += 11;
  446.                } else {
  447.                    num += hand[i].num;
  448.                    hiddennum += hand[i].num;
  449.                }
  450.            } else {
  451.                text = text + `${client.emojis.find(e=>e.name === backcard)} `
  452.                hiddentext = hiddentext + `${hand[i].card} `
  453.                if (hand[i].num == `ace`) {
  454.                    hiddennum += 11;
  455.                } else {
  456.                    hiddennum += hand[i].num;
  457.                }
  458.            }
  459.        }
  460.        return {"string":text, num:num, hiddenstring:hiddentext, hiddennum:hiddennum};
  461.    }
  462. }
  463.  
  464. async function win(game) {
  465.    let message = await client.clowncafe.channels.get(game.channelid).fetchMessage(game.messageid);
  466.    let member = await client.clowncafe.members.get(game.userid);
  467.    let playerHandS = returnHandString(game.playerHand, "player");
  468.    let dealerHandS = returnHandString(game.dealerHand, "dealer");
  469.  
  470.    let embed = new RichEmbed()
  471.        .setTitle("Blackjack:")
  472.        .setColor("GREEN")
  473.        .setDescription(`**Win:** 🤡 ${game.bet*2}`)
  474.        .addField("Your Hand", `${playerHandS.string}\n${playerHandS.soft}${playerHandS.num}`, true)
  475.        .addField("Dealer Hand", `${dealerHandS.hiddenstring}\n${dealerHandS.hiddennum}`, true)
  476.        .setFooter(`${member.user.username} - Cards left in Shoe: ${shoe.length}`, member.user.displayAvatarURL)
  477.  
  478.    message.edit(embed);
  479.    let wallet = balsys.getCurrency(member.id, "wallet");
  480.    balsys.setCurrency(member.id, wallet+(game.bet*2), "wallet");
  481.    deleteGame(member.id);
  482.    checkShoeLength()
  483. }
  484.  
  485. async function loss(game) {
  486.    let message = await client.clowncafe.channels.get(game.channelid).fetchMessage(game.messageid);
  487.    let member = await client.clowncafe.members.get(game.userid);
  488.    let playerHandS = returnHandString(game.playerHand, "player");
  489.    let dealerHandS = returnHandString(game.dealerHand, "dealer");
  490.  
  491.    let embed = new RichEmbed()
  492.        .setTitle("Blackjack:")
  493.        .setColor("RED")
  494.        .setDescription(`**Loss:** 🤡 ${game.bet}`)
  495.        .addField("Your Hand", `${playerHandS.string}\n${playerHandS.soft}${playerHandS.num}`, true)
  496.        .addField("Dealer Hand", `${dealerHandS.hiddenstring}\n${dealerHandS.hiddennum}`, true)
  497.        .setFooter(`${member.user.username} - Cards left in Shoe: ${shoe.length}`, member.user.displayAvatarURL)
  498.  
  499.    message.edit(embed);
  500.    deleteGame(member.id);
  501.    checkShoeLength()
  502. }
  503.  
  504. async function draw(game) {
  505.    let message = await client.clowncafe.channels.get(game.channelid).fetchMessage(game.messageid);
  506.    let member = await client.clowncafe.members.get(game.userid);
  507.    let playerHandS = returnHandString(game.playerHand, "player");
  508.    let dealerHandS = returnHandString(game.dealerHand, "dealer");
  509.  
  510.    let embed = new RichEmbed()
  511.        .setTitle("Blackjack:")
  512.        .setColor("YELLOW")
  513.        .setDescription(`**Draw:** 🤡 ${game.bet}`)
  514.        .addField("Your Hand", `${playerHandS.string}\n${playerHandS.soft}${playerHandS.num}`, true)
  515.        .addField("Dealer Hand", `${dealerHandS.hiddenstring}\n${dealerHandS.hiddennum}`, true)
  516.        .setFooter(`${member.user.username} - Cards left in Shoe: ${shoe.length}`, member.user.displayAvatarURL)
  517.  
  518.    message.edit(embed);
  519.    let wallet = balsys.getCurrency(member.id, "wallet");
  520.    balsys.setCurrency(member.id, wallet+game.bet, "wallet");
  521.    deleteGame(member.id);
  522.    checkShoeLength()
  523. }
  524.  
  525. async function update(game) {
  526.    let message = await client.clowncafe.channels.get(game.channelid).fetchMessage(game.messageid);
  527.    let member = await client.clowncafe.members.get(game.userid);
  528.    let playerHandS = returnHandString(game.playerHand, "player");
  529.    let dealerHandS = returnHandString(game.dealerHand, "dealer");
  530.  
  531.    let embed = new RichEmbed()
  532.        .setTitle("Blackjack:")
  533.        .setColor(member.displayHexColor === "#000000" ? client.clowncafe.me.displayHexColor : member.displayHexColor)
  534.        .setDescription(`**Bet:** 🤡 ${game.bet}\nreact with: ${hitemote} to hit, ${standemote} to stand or ${doubledownemote} to doubledown`)
  535.        .addField("Your Hand", `${playerHandS.string}\n${playerHandS.soft}${playerHandS.num}`, true)
  536.        .addField("Dealer Hand", `${dealerHandS.string}\n${dealerHandS.num}`, true)
  537.        .setFooter(`${member.user.username} - Cards left in Shoe: ${shoe.length}`, member.user.displayAvatarURL)
  538.  
  539.    message.edit(embed);
  540. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement