N

#1024 · closed · 0 comments

View on GitHub ↗

HendyChan

import net.dv8tion.jda.api.*; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import javax.security.auth.login.LoginException; import java.util.*; public class WerewolfBot extends ListenerAdapter { enum Role { WEREWOLF, VILLAGER } static class Player { long id; String name; Role role; boolean alive = true; Player(long id, String name) { this.id = id; this.name = name; } } static class Game { Map<Long, Player> players = new HashMap<>(); boolean started = false; boolean night = true; Set<Long> votes = new HashSet<>(); } private static Game game = new Game(); public static void main(String[] args) throws LoginException { String token = "TOKEN_BOT_CUA_BAN"; JDABuilder.createDefault(token) .enableIntents(GatewayIntent.MESSAGE_CONTENT) .addEventListeners(new WerewolfBot()) .build(); } @Override public void onMessageReceived(MessageReceivedEvent e) { if (e.getAuthor().isBot()) return; String msg = e.getMessage().getContentRaw(); long userId = e.getAuthor().getIdLong(); // JOIN if (msg.equalsIgnoreCase("!join")) { if (game.started) { e.getChannel().sendMessage("Game đã bắt đầu!").queue(); return; } game.players.put(userId, new Player(userId, e.getAuthor().getName())); e.getChannel().sendMessage(e.getAuthor().getName() + " đã tham gia!").queue(); } // START if (msg.equalsIgnoreCase("!start")) { if (game.players.size() < 3) { e.getChannel().sendMessage("Cần ít nhất 3 người!").queue(); return; } game.started = true; assignRoles(e); e.getChannel().sendMessage("🎮 Game bắt đầu! Đêm xuống...").queue(); } // KILL (chỉ sói dùng DM) if (msg.startsWith("!kill")) { Player killer = game.players.get(userId); if (killer == null || killer.role != Role.WEREWOLF || !game.night) return; long targetId = e.getMessage().getMentions().getUsers().get(0).getIdLong(); Player target = game.players.get(targetId); if (target != null && target.alive) { target.alive = false; e.getChannel().sendMessage("🌙 Một người đã chết...").queue(); game.night = false; } } // VOTE if (msg.startsWith("!vote")) { if (game.night) { e.getChannel().sendMessage("Ban đêm không vote!").queue(); return; } long targetId = e.getMessage().getMentions().getUsers().get(0).getIdLong(); game.votes.add(targetId); if (game.votes.size() >= game.players.size() / 2) { Player target = game.players.get(targetId); target.alive = false; e.getChannel().sendMessage("🔥 " + target.name + " đã bị treo cổ!").queue(); game.votes.clear(); game.night = true; checkWin(e); } } } private void assignRoles(MessageReceivedEvent e) { List<Player> list = new ArrayList<>(game.players.values()); Collections.shuffle(list); int wolfCount = Math.max(1, list.size() / 4); for (int i = 0; i < list.size(); i++) { Player p = list.get(i); if (i < wolfCount) { p.role = Role.WEREWOLF; sendDM(e, p.id, "🐺 Bạn là MA SÓI!"); } else { p.role = Role.VILLAGER; sendDM(e, p.id, "👨‍🌾 Bạn là DÂN!"); } } } private void sendDM(MessageReceivedEvent e, long userId, String msg) { e.getJDA().retrieveUserById(userId).queue(user -> user.openPrivateChannel().queue(channel -> channel.sendMessage(msg).queue() ) ); } private void checkWin(MessageReceivedEvent e) { int wolf = 0, villager = 0; for (Player p : game.players.values()) { if (!p.alive) continue; if (p.role == Role.WEREWOLF) wolf++; else villager++; } if (wolf == 0) { e.getChannel().sendMessage("🎉 DÂN THẮNG!").queue(); resetGame(); } else if (wolf >= villager) { e.getChannel().sendMessage("🐺 MA SÓI THẮNG!").queue(); resetGame(); } } private void resetGame() { game = new Game(); } }

Comments