AnshorFalahi

wwgc.js

Jul 10th, 2024
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const jimp = require("jimp");
  2. const { default: areJidsSameUser } = require("@adiwajshing/baileys");
  3. const PhoneNumber = require("awesome-phonenumber");
  4.  
  5. const resize = async (image, width, height) => {
  6.   const read = await jimp.read(image);
  7.   const data = await read.resize(width, height).getBufferAsync(jimp.MIME_JPEG);
  8.   return data;
  9. };
  10.  
  11. async function getName(jid) {
  12.     //return name user from jid
  13.     let user = global.db.users.find((v) => v.jid === client.decodeJid(jid));
  14.     if (!user) return jid;
  15.     return user.name
  16. }
  17.  
  18. const {
  19.   emoji_role,
  20.   sesi,
  21.   playerOnGame,
  22.   playerOnRoom,
  23.   playerExit,
  24.   dataPlayer,
  25.   dataPlayerById,
  26.   getPlayerById,
  27.   getPlayerById2,
  28.   killWerewolf,
  29.   killww,
  30.   dreamySeer,
  31.   sorcerer,
  32.   protectGuardian,
  33.   roleShuffle,
  34.   roleChanger,
  35.   roleAmount,
  36.   roleGenerator,
  37.   addTimer,
  38.   startGame,
  39.   playerHidup,
  40.   playerMati,
  41.   vote,
  42.   voteResult,
  43.   clearAllVote,
  44.   getWinner,
  45.   win,
  46.   pagi,
  47.   malam,
  48.   skill,
  49.   voteStart,
  50.   voteDone,
  51.   voting,
  52.   run,
  53.   run_vote,
  54.   run_malam,
  55.   run_pagi,
  56. } = require("../../lib/werewolf");
  57.  
  58. let thumb =
  59.   "https://user-images.githubusercontent.com/72728486/235316834-f9f84ba0-8df3-4444-81d8-db5270995e6d.jpg";
  60.  
  61. exports.run = {
  62.   usage: ["werewolf", "ww"],
  63.   category: "games",
  64.   async: async (m, { client, command, isPrefix, args, Func }) => {
  65.     const { sender, chat } = m;
  66.     client.werewolf = client.werewolf ? client.werewolf : {};
  67.     const ww = client.werewolf ? client.werewolf : {};
  68.     const data = ww[chat];
  69.     const value = args[0];
  70.     const target = args[1];
  71.  
  72.     // [ Membuat Room ]
  73.     if (value === "create") {
  74.       if (chat in ww) return m.reply("Group masih dalam sesi permainan");
  75.       if (playerOnGame(sender, ww) === true)
  76.         return m.reply("Kamu masih dalam sesi game");
  77.       ww[chat] = {
  78.         room: chat,
  79.         owner: sender,
  80.         status: false,
  81.         iswin: null,
  82.         cooldown: null,
  83.         day: 0,
  84.         time: "malem",
  85.         player: [],
  86.         dead: [],
  87.         voting: false,
  88.         seer: false,
  89.         guardian: [],
  90.       };
  91.       await m.reply("Room berhasil dibuat, ketik *.ww join* untuk bergabung");
  92.     } else if (value === "join") {
  93.       if (!ww[chat]) return m.reply("Belum ada sesi permainan");
  94.       if (ww[chat].status === true)
  95.         return m.reply("Sesi permainan sudah dimulai");
  96.       if (ww[chat].player.length > 16)
  97.         return m.reply("Maaf jumlah player telah penuh");
  98.       if (playerOnRoom(sender, chat, ww) === true)
  99.         return m.reply("Kamu sudah join dalam room ini");
  100.       if (playerOnGame(sender, ww) === true)
  101.         return m.reply("Kamu masih dalam sesi game");
  102.       let data = {
  103.         id: sender,
  104.         number: ww[chat].player.length + 1,
  105.         sesi: chat,
  106.         status: false,
  107.         role: false,
  108.         effect: [],
  109.         vote: 0,
  110.         isdead: false,
  111.         isvote: false,
  112.       };
  113.       ww[chat].player.push(data);
  114.       let player = [];
  115.       let text = `\n*⌂ W E R E W O L F - P L A Y E R*\n\n`;
  116.       for (let i = 0; i < ww[chat].player.length; i++) {
  117.         text += `${ww[chat].player[i].number}) @${ww[chat].player[i].id.replace(
  118.           "@s.whatsapp.net",
  119.           ""
  120.         )}\n`;
  121.         player.push(ww[chat].player[i].id);
  122.       }
  123.       text += "\nJumlah player minimal adalah 5 dan maximal 15";
  124.       client.sendMessage(
  125.         m.chat,
  126.         {
  127.           text: text.trim(),
  128.           contextInfo: {
  129.             externalAdReply: {
  130.               title: "W E R E W O L F",
  131.               mediaType: 1,
  132.               renderLargerThumbnail: true,
  133.               thumbnail: await resize(thumb, 300, 175),
  134.               sourceUrl: "",
  135.               mediaUrl: thumb,
  136.             },
  137.             mentionedJid: player,
  138.           },
  139.         },
  140.         {
  141.           quoted: m,
  142.         }
  143.       );
  144.  
  145.       // [ Game Play ]
  146.     } else if (value === "start") {
  147.       if (!ww[chat]) return m.reply("Belum ada sesi permainan");
  148.       if (ww[chat].player.length === 0)
  149.         return m.reply("Room belum memiliki player");
  150.       if (ww[chat].player.length < 5)
  151.         return m.reply("Maaf jumlah player belum memenuhi syarat");
  152.       if (playerOnRoom(sender, chat, ww) === false)
  153.         return m.reply("Kamu belum join dalam room ini");
  154.       if (ww[chat].cooldown > 0) {
  155.         if (ww[chat].time === "voting") {
  156.           clearAllVote(chat, ww);
  157.           addTimer(chat, ww);
  158.           return await run_vote(client, chat, ww);
  159.         } else if (ww[chat].time === "malem") {
  160.           clearAllVote(chat, ww);
  161.           addTimer(chat, ww);
  162.           return await run_malam(client, chat, ww);
  163.         } else if (ww[chat].time === "pagi") {
  164.           clearAllVote(chat, ww);
  165.           addTimer(chat, ww);
  166.           return await run_pagi(client, chat, ww);
  167.         }
  168.       }
  169.       if (ww[chat].status === true)
  170.         return m.reply("Sesi permainan telah dimulai");
  171.       if (ww[chat].owner !== sender)
  172.         return m.reply(
  173.           `Hanya @${ww[chat].owner.split("@")[0]} yang dapat memulai permainan`,
  174.           {
  175.             withTag: true,
  176.           }
  177.         );
  178.       let list1 = "";
  179.       let list2 = "";
  180.       let player = [];
  181.       roleGenerator(chat, ww);
  182.       addTimer(chat, ww);
  183.       startGame(chat, ww);
  184.       for (let i = 0; i < ww[chat].player.length; i++) {
  185.         list1 += `(${ww[chat].player[i].number}) @${ww[chat].player[
  186.           i
  187.         ].id.replace("@s.whatsapp.net", "")}\n`;
  188.         player.push(ww[chat].player[i].id);
  189.       }
  190.       for (let i = 0; i < ww[chat].player.length; i++) {
  191.         list2 += `(${ww[chat].player[i].number}) @${ww[chat].player[
  192.           i
  193.         ].id.replace("@s.whatsapp.net", "")} ${
  194.           ww[chat].player[i].role === "werewolf" ||
  195.           ww[chat].player[i].role === "sorcerer"
  196.             ? `[${ww[chat].player[i].role}]`
  197.             : ""
  198.         }\n`;
  199.         player.push(ww[chat].player[i].id);
  200.       }
  201.       for (let i = 0; i < ww[chat].player.length; i++) {
  202.         // [ Werewolf ]
  203.         if (ww[chat].player[i].role === "werewolf") {
  204.           if (ww[chat].player[i].isdead != true) {
  205.             var text = `Hai ${getName(
  206.               ww[chat].player[i].id
  207.             )} , Kamu telah dipilih untuk memerankan *Werewolf* ${emoji_role(
  208.               "werewolf"
  209.             )} pada permainan kali ini, silahkan pilih salah satu player yang ingin kamu makan pada malam hari ini\n*LIST PLAYER*:\n${list2}\n\nKetik *.wwpc kill nomor* untuk membunuh player`;
  210.             await client.sendMessage(ww[chat].player[i].id, {
  211.               text: text,
  212.               mentions: player,
  213.             });
  214.           }
  215.  
  216.           // [ villager ]
  217.         } else if (ww[chat].player[i].role === "warga") {
  218.           if (ww[chat].player[i].isdead != true) {
  219.             let text = `*⌂ W E R E W O L F - G A M E*\n\nHai ${getName(
  220.               ww[chat].player[i].id
  221.             )} Peran kamu adalah *Warga Desa* ${emoji_role(
  222.               "warga"
  223.             )}, tetap waspada, mungkin *Werewolf* akan memakanmu malam ini, silakan masuk kerumah masing masing.\n*LIST PLAYER*:\n${list1}`;
  224.             await client.sendMessage(ww[chat].player[i].id, {
  225.               text: text,
  226.               mentions: player,
  227.             });
  228.           }
  229.  
  230.           // [ Penerawangan ]
  231.         } else if (ww[chat].player[i].role === "seer") {
  232.           if (ww[chat].player[i].isdead != true) {
  233.             let text = `Hai ${getName(
  234.               ww[chat].player[i].id
  235.             )} Kamu telah terpilih  untuk menjadi *Penerawang* ${emoji_role(
  236.               "seer"
  237.             )}. Dengan sihir yang kamu punya, kamu bisa mengetahui peran pemain pilihanmu.\n*LIST PLAYER*:\n${list1}\n\nKetik *.wwpc dreamy nomor* untuk melihat role player`;
  238.  
  239.             await client.sendMessage(ww[chat].player[i].id, {
  240.               text: text,
  241.               mentions: player,
  242.             });
  243.           }
  244.  
  245.           // [ Guardian ]
  246.         } else if (ww[chat].player[i].role === "guardian") {
  247.           if (ww[chat].player[i].isdead != true) {
  248.             let text = `Hai ${getName(
  249.               ww[chat].player[i].id
  250.             )} Kamu terpilih untuk memerankan *Malaikat Pelindung* ${emoji_role(
  251.               "guardian"
  252.             )}, dengan kekuatan yang kamu miliki, kamu bisa melindungi para warga, silahkan pilih salah 1 player yang ingin kamu lindungi\n*LIST PLAYER*:\n${list1}\n\nKetik *.wwpc deff nomor* untuk melindungi player`;
  253.  
  254.             await client.sendMessage(ww[chat].player[i].id, {
  255.               text: text,
  256.               mentions: player,
  257.             });
  258.           }
  259.  
  260.           // [ Sorcerer ]
  261.         } else if (ww[chat].player[i].role === "sorcerer") {
  262.           if (ww[chat].player[i].isdead != true) {
  263.             let text = `Hai ${getName(
  264.               ww[chat].player[i].id
  265.             )} Kamu terpilih sebagai Penyihir ${emoji_role(
  266.               "sorcerer"
  267.             )}, dengan kekuasaan yang kamu punya, kamu bisa membuka identitas para player, silakan pilih 1 orang yang ingin kamu buka identitasnya\n*LIST PLAYER*:\n${list2}\n\nKetik *.wwpc sorcerer nomor* untuk melihat role player`;
  268.  
  269.             await client.sendMessage(ww[chat].player[i].id, {
  270.               text: text,
  271.               mentions: player,
  272.             });
  273.           }
  274.         }
  275.       }
  276.       await client.sendMessage(m.chat, {
  277.         text: "*⌂ W E R E W O L F - G A M E*\n\nGame telah dimulai, para player akan memerankan perannya masing masing, silahkan cek chat pribadi untuk melihat role kalian. Berhati-hatilah para warga, mungkin malam ini adalah malah terakhir untukmu",
  278.         contextInfo: {
  279.           externalAdReply: {
  280.             title: "W E R E W O L F",
  281.             mediaType: 1,
  282.             renderLargerThumbnail: true,
  283.             thumbnail: await resize(thumb, 300, 175),
  284.             sourceUrl: "",
  285.             mediaUrl: thumb,
  286.           },
  287.           mentionedJid: player,
  288.         },
  289.       });
  290.       await run(client, chat, ww);
  291.     } else if (value === "vote") {
  292.       if (!ww[chat]) return m.reply("Belum ada sesi permainan");
  293.       if (ww[chat].status === false)
  294.         return m.reply("Sesi permainan belum dimulai");
  295.       if (ww[chat].time !== "voting")
  296.         return m.reply("Sesi voting belum dimulai");
  297.       if (playerOnRoom(sender, chat, ww) === false)
  298.         return m.reply("Kamu bukan player");
  299.       if (dataPlayer(sender, ww).isdead === true)
  300.         return m.reply("Kamu sudah mati");
  301.       if (!target || target.length < 1) return m.reply("Masukan nomor player");
  302.       if (isNaN(target)) return m.reply("Gunakan hanya nomor");
  303.       if (dataPlayer(sender, ww).isvote === true)
  304.         return m.reply("Kamu sudah melakukan voting");
  305.       let b = getPlayerById(chat, sender, parseInt(target), ww);
  306.       if (b.db.isdead === true) return m.reply(`Player ${target} sudah mati.`);
  307.       if (ww[chat].player.length < parseInt(target)) return m.reply("Invalid");
  308.       if (getPlayerById(chat, sender, parseInt(target), ww) === false)
  309.         return m.reply("Player tidak terdaftar!");
  310.       vote(chat, parseInt(target), sender, ww);
  311.       return m.reply("✅ Vote");
  312.     } else if (value == "exit") {
  313.       if (!ww[chat]) return m.reply("Tidak ada sesi permainan");
  314.       if (playerOnRoom(sender, chat, ww) === false)
  315.         return m.reply("Kamu tidak dalam sesi permainan");
  316.       if (ww[chat].status === true)
  317.         return m.reply("Permainan sudah dimulai, kamu tidak bisa keluar");
  318.       m.reply(`@${sender.split("@")[0]} Keluar dari permainan`, {
  319.         withTag: true,
  320.       });
  321.       playerExit(chat, sender, ww);
  322.     } else if (value === "delete") {
  323.       if (!ww[chat]) return m.reply("Tidak ada sesi permainan");
  324.       if (ww[chat].owner !== sender)
  325.         return m.reply(
  326.           `Hanya @${
  327.             ww[chat].owner.split("@")[0]
  328.           } yang dapat menghapus sesi permainan ini`
  329.         );
  330.       m.reply("Sesi permainan berhasil dihapus").then(() => {
  331.         delete ww[chat];
  332.       });
  333.     } else if (value === "player") {
  334.       if (!ww[chat]) return m.reply("Tidak ada sesi permainan");
  335.       if (playerOnRoom(sender, chat, ww) === false)
  336.         return m.reply("Kamu tidak dalam sesi permainan");
  337.       if (ww[chat].player.length === 0)
  338.         return m.reply("Sesi permainan belum memiliki player");
  339.       let player = [];
  340.       let text = "\n*⌂ W E R E W O L F - G A M E*\n\nLIST PLAYER:\n";
  341.       for (let i = 0; i < ww[chat].player.length; i++) {
  342.         text += `(${ww[chat].player[i].number}) @${ww[chat].player[
  343.           i
  344.         ].id.replace("@s.whatsapp.net", "")} ${
  345.           ww[chat].player[i].isdead === true
  346.             ? `☠️ ${ww[chat].player[i].role}`
  347.             : ""
  348.         }\n`;
  349.         player.push(ww[chat].player[i].id);
  350.       }
  351.       client.sendMessage(
  352.         m.chat,
  353.         {
  354.           text: text,
  355.           contextInfo: {
  356.             externalAdReply: {
  357.               title: "W E R E W O L F",
  358.               mediaType: 1,
  359.               renderLargerThumbnail: true,
  360.               thumbnail: await resize(thumb, 300, 175),
  361.               sourceUrl: "",
  362.               mediaUrl: thumb,
  363.             },
  364.             mentionedJid: player,
  365.           },
  366.         },
  367.         {
  368.           quoted: m,
  369.         }
  370.       );
  371.     } else {
  372.       let text = `\n*⌂ W E R E W O L F - G A M E*\n\nPermainan Sosial Yang Berlangsung Dalam Beberapa Putaran/ronde. Para Pemain Dituntut Untuk Mencari Seorang Penjahat Yang Ada Dipermainan. Para Pemain Diberi Waktu, Peran, Serta Kemampuannya Masing-masing Untuk Bermain Permainan Ini\n\n*⌂ C O M M A N D*\n`;
  373.       text += ` • ww create\n`;
  374.       text += ` • ww join\n`;
  375.       text += ` • ww start\n`;
  376.       text += ` • ww exit\n`;
  377.       text += ` • ww delete\n`;
  378.       text += ` • ww player\n`;
  379.       text += `\nPermainan ini dapat dimainkan oleh 5 sampai 15 orang.`;
  380.       client.sendMessage(
  381.         m.chat,
  382.         {
  383.           text: text.trim(),
  384.           contextInfo: {
  385.             externalAdReply: {
  386.               title: "W E R E W O L F",
  387.               mediaType: 1,
  388.               renderLargerThumbnail: true,
  389.               thumbnail: await resize(thumb, 300, 175),
  390.               sourceUrl: "",
  391.               mediaUrl: thumb,
  392.             },
  393.           },
  394.         },
  395.         {
  396.           quoted: m,
  397.         }
  398.       );
  399.     }
  400.   },
  401.   group: true,
  402.   limit: true,
  403.   game: true,
  404. };
  405.  
Add Comment
Please, Sign In to add comment