public async Task Remind(int h, int m, [Remainder] string text) { await Context.Message.DeleteAsync(); DiscordWrapper.Log($"Lời nhắc của {Context.Message.Author.Username} ({Context.Message.Author.Id}) ở guild {Context.Guild.Name} ({h}:{m} / {text})"); try { WqlEventQuery query = new WqlEventQuery ("__InstanceModificationEvent", new TimeSpan(0, 0, 60), $"TargetInstance isa 'Win32_LocalTime' AND TargetInstance.Hour={h} AND TargetInstance.Minute={m} AND TargetInstance.Second=0"); ManagementEventWatcher watcher = new ManagementEventWatcher(query); watcher.EventArrived += async(object sender, EventArrivedEventArgs e) => { await DiscordWrapper.SendMessage(Context, $"*Đây là lời nhắc dành cho {Context.Message.Author.Mention}:*\n{text}"); }; watcher.Start(); } catch (Exception e) { DiscordWrapper.Log($"[log] ScheduledTask in Module: {e}"); DiscordWrapper.Log($"Lỗi {e} ở lời nhác của {Context.Message.Author.Id} ở guild {Context.Guild.Name} ({h}:{m} / {text})"); await DiscordWrapper.SendMessage(Context, $"Có lỗi xảy ra. Bạn nhắc lại giúp Mèo thời gian và lời nhắn với, {Context.Message.Author.Mention}."); } }
public async Task New() { ulong UserId = Context.Message.Author.Id; await DiscordWrapper.SendMessage(Context, $"{MentionUtils.MentionUser(UserId)}, bạn có chắc muốn tạo trò chơi mới? (Yes/No)"); string content = null; SocketMessage msg; Stopwatch s = new Stopwatch(); s.Start(); do { msg = await NextMessageAsync(fromSourceUser : true, inSourceChannel : true, timeout : TimeSpan.FromMinutes(5)); if (msg == null) { break; } content = msg.Content.ToLower(); if (content == "yes" || content == "no") { break; } } while (s.Elapsed < TimeSpan.FromMinutes(5)); if (msg == null) { await DiscordWrapper.SendMessage(Context, $"Mèo không nhận được phản hồi của {MentionUtils.MentionUser(UserId)}... :cry:"); return; } else if (content == "no") { await DiscordWrapper.SendMessage(Context, $"Trò chơi mới sẽ không được tạo."); await Task.Delay(TimeSpan.FromSeconds(5)); await(Context.Channel as ITextChannel).DeleteMessagesAsync(await Context.Channel.GetMessagesAsync(4).FlattenAsync()); return; } await(Context.Channel as ITextChannel).DeleteMessagesAsync(await Context.Channel.GetMessagesAsync(2).FlattenAsync()); Puzzle puzzle = new Puzzle(UserId); Save(ref puzzle); DiscordWrapper.Log($"puzzle new | {Context.Message.Author.Username} ({Context.Message.Author.Id})"); if (!(await Host())) { var embed = new EmbedBuilder { Description = $"Trò chơi của {MentionUtils.MentionUser(puzzle.PlayerId) } đã tạm dừng.", Color = Color.Blue }; await DiscordWrapper.SendMessage(Context, embed : embed.Build()); } }
public async Task Continue() { var chess = Load(); if (chess.IsOver) { var embed = new EmbedBuilder { Description = "Không có trận đấu nào chưa kết thúc.", Color = Color.Blue }; await Context.Channel.TriggerTypingAsync(); await ReplyAndDeleteAsync(content : null, embed : embed.Build(), timeout : TimeSpan.FromSeconds(5)); } else if (!(await Host())) { var embed = new EmbedBuilder { Description = $"Trận đấu giữa {MentionUtils.MentionUser(chess.Player[ChessBoard.WhitePlayerIndex])} và {MentionUtils.MentionUser(chess.Player[ChessBoard.BlackPlayerIndex])} đã tạm dừng.", Color = Color.Blue }; //await ReplyAsync(embed: embed.Build()); await DiscordWrapper.SendMessage(Context, embed : embed.Build()); } }
public async Task Help() { //return; var embed = new EmbedBuilder { Description = "**>> Cùng điểm qua những câu lệnh Mèo có nào!**", Color = Color.Magenta }; embed.AddField("*'hi*", "Cùng chào nhau nhé!") .AddField("*'react <ID tin nhắn> <emoji_1> <emoji_2> ... <emoji_n>*", "Mèo sẽ \"thả tym\" vào tin nhắn có ID đó!") .AddField("*'say <true/false>(true nếu ẩn danh, mặc định là false) <thời gian chờ>(theo giây, mặc định là 0) <tin nhắn>*", "Mèo sẽ giúp bạn gửi tin nhắn đó!") .AddField("*'party*", "Đến lúc quẩy rồi!!! :partying_face:") .AddField("*'rmd <giờ>(0 - 23) <phút>(0 - 59) <lời nhắc>*", "Mèo sẽ nhắc nhở bạn vào thời điểm đó!") .AddField("*'wait <giây> <lời nhắn>*", "Mèo sẽ gửi lời nhắn đó sau số giây nhất định!") .AddField("Ngoài ra, bạn có thể thử *'join*, *'play*, *'stop* và *'leave*~ :notes:", "Dùng *'help exam* để xem các lệnh về các bài kiểm tra~\n" + "Dùng *'help game* để xem các lệnh về trò chơi~\n" + "Dùng *'help CF* để xem các lệnh về Codeforces~\n" + " *^^Chúc bạn một ngày tốt lành!^^*"); await DiscordWrapper.SendMessage(Context, embed : embed.Build()); }
public async Task Say([Remainder] string text) { await Context.Message.DeleteAsync(); string author = Context.Message.Author.Mention; if (text.StartsWith("||") && text.EndsWith("||")) { text = text.Substring(2, text.Length - 4); } await DiscordWrapper.SendMessage(Context, $"*Từ {author}:*\n{text}"); }
public async Task Party() { string[] emotes = new string[4]; emotes[0] = "\uD83D\uDC08"; // cat2 emotes[1] = "\ud83e\udd73"; // partying_face emotes[2] = "\uD83C\uDF89"; // tada emotes[3] = "\uD83C\uDF8A"; // confetti_ball var msg = await DiscordWrapper.SendMessage(Context, ":cat2::partying_face::tada::confetti_ball::confetti_ball::confetti_ball::tada::partying_face::cat2:"); foreach (var emote in emotes) { await msg.AddReactionAsync(new Emoji(emote)); } }
public async Task Say(int wait_sec, [Remainder] string text) { await Context.Message.DeleteAsync(); string author = Context.Message.Author.Mention; if (text.StartsWith("||") && text.EndsWith("||")) { text = text.Substring(2, text.Length - 4); } await Task.Delay(TimeSpan.FromMilliseconds(Math.Max(0, wait_sec * 1000 - 1900))); await DiscordWrapper.SendMessage(Context, $"*Từ {author}:*\n{text}"); }
public async Task <IEnumerable <IMessage> > Print(ISocketMessageChannel Channel = null) { if (Channel == null) { Channel = Context.Channel; } Puzzle puzzle = Load(); if (puzzle.IsOver) { var embed = new EmbedBuilder { Description = $"*{ MentionUtils.MentionUser(puzzle.PlayerId) }* đã kết thúc trò chơi trong ***{puzzle.MoveCount}*** bước! :partying_face::tada::confetti_ball:", Color = Color.Red }; await DiscordWrapper.SendMessage(Context, embed : embed.Build(), Channel : Channel); } else { var embed = new EmbedBuilder { Description = $"*Người chơi: { MentionUtils.MentionUser(puzzle.PlayerId) }*\nSố bước đã đi: {puzzle.MoveCount}.", Color = Color.Magenta }; await DiscordWrapper.SendMessage(Context, embed : embed.Build(), Channel : Channel); } string output = ""; for (var i = 0; i < Puzzle.Size; i++) { for (var j = 0; j < Puzzle.Size; j++) { output += $"{puzzle.Board[i, j]} "; } if (i == 0) { output += $"{Puzzle.IconFull}\n"; } else { output += ":black_large_square:\n"; } } await Channel.SendMessageAsync(output); return(await Channel.GetMessagesAsync(2).FlattenAsync()); }
public async Task HelpCF() { var embedCF = new EmbedBuilder { Color = Color.Red }; embedCF.AddField("*>> 'cf*", "**>> Những lệnh liên quan Codeforces:**") .AddField("*'cf contest <số lượng, mặc định là 0>", "Mèo cho bạn danh sách các contest sắp diễn ra, ưu tiên contest diễn ra (nếu số lượng là 0 thì in tất cả).") .AddField("*'cf user <handle>*", "Mèo cho bạn thông tin về <handle>, gồm *rank*, *rating*, *maxRating*, *lastOnlineTime*.") .AddField("Các lệnh có thể không thực hiện được nếu máy chủ Codeforces đang trong giờ cao điểm.", "*^^Chúc bạn thi thật tốt và vui vẻ!^^*"); await DiscordWrapper.SendMessage(Context, embed : embedCF.Build()); }
public async Task HelpExam() { var embedExam = new EmbedBuilder { Color = Color.LightOrange }; embedExam.AddField("*>> 'exam*", "**>> Những lệnh liên quan đến các bài kiểm tra trong lớp T.T:**") .AddField("*'exam add <môn học> <thứ>(2 - 6) <thời lượng kiểm tra> <ghi chú>(nếu có)*", "Thêm bài kiểm tra vào danh sách của Mèo~") .AddField("*'exam get <thứ>(2 - 6)*", "Xem tất cả các bài kiểm tra có trong ngày hôm đó.") .AddField("*'exam get <môn học>*", "Xem tất cả các bài kiểm tra của môn học đó.") .AddField("*'exam all*", "Xem tất cả các bài kiểm tra có trong 7 ngày tới!") .AddField("*'exam rm <thứ>(2 - 6)*", "Xoá các bài kiểm tra của ngày đó trong danh sách của Mèo! :partying_face:") .AddField("*'exam rm <môn học> <thứ>(2 - 6) <thời lượng kiểm tra> <ghi chú>(nếu có)*", "Xoá bài kiểm tra trong danh sách của Mèo! :partying_face:") .AddField("*'exam clear*", "Xoá toàn bộ các bài kiểm tra trong danh sách của Mèo!!! :partying_face::tada::confetti_ball:") .AddField("^^Cố gắng lên nào!^^ :fist::fist:", "*^^Chúc bạn làm bài thật tốt!^^*"); await DiscordWrapper.SendMessage(Context, embed : embedExam.Build()); }
public async Task HelpGame() { var embedChess = new EmbedBuilder { Color = Color.LightOrange }; embedChess.AddField("*>> 'chess*", "**>> Những lệnh liên quan đến trò chơi :chess_pawn:~:**") .AddField("*'chess new <tên người chơi 2>:*", "Bắt đầu một ván đấu mới.") .AddField("*'chess continue*", "Tiếp tục ván đấu được lưu (nếu chưa kết thúc).") .AddField("*'chess print*", "In ra bàn cờ và trạng thái của ván đấu được lưu.") // Move .AddField("*>> move*", "**>> Những lệnh trong ván đấu:**") .AddField("*move <nước đi (vd a2 b3)>*", "Di chuyển quân cờ.") .AddField("*move pause*", "Tạm ngưng trò chơi.") .AddField("*move draw*", "Đề xuất hoà ván đấu.") .AddField("*move surrender*", "Kết thúc trò chơi với kết quả thua. :cry:") //Puzzle .AddField("*>> 'puzzle*", "**>> Những lệnh liên quan đến trò chơi :jigsaw:~:**") .AddField("*'puzzle new:*", "Bắt đầu một trò chơi mới.") .AddField("*'puzzle continue*", "Tiếp tục trò chơi được lưu (nếu chưa kết thúc).") .AddField("*'chess print*", "In ra trò chơi đang được lưu.") .AddField("^^Chơi hết mình nhé!^^ :fist::fist:", "*^^Chúc mọi người chơi vui vẻ!^^*"); await DiscordWrapper.SendMessage(Context, embed : embedChess.Build()); }
public async Task Continue() { var puzzle = Load(); if (puzzle.IsOver) { var embed = new EmbedBuilder { Description = "Không có trò chơi nào chưa hoàn thành.", Color = Color.Blue }; await Context.Channel.TriggerTypingAsync(); await ReplyAndDeleteAsync(content : null, embed : embed.Build(), timeout : TimeSpan.FromSeconds(5)); } else if (!(await Host())) { var embed = new EmbedBuilder { Description = $"Trò chơi của {MentionUtils.MentionUser(puzzle.PlayerId) } đã tạm dừng.", Color = Color.Blue }; await DiscordWrapper.SendMessage(Context, embed : embed.Build()); } }
public async Task <IEnumerable <IMessage> > Print(ISocketMessageChannel Channel = null) { if (Channel == null) { Channel = Context.Channel; } ChessBoard chess = Load(); string[] sqr = { ":white_large_square:", ":black_large_square:" }; string[] numbers = { ":one:", ":two:", ":three:", ":four:", ":five:", ":six:", ":seven:", ":eight:" }; string[] letters = { ":regional_indicator_a:", ":regional_indicator_b:", ":regional_indicator_c:", ":regional_indicator_d:", ":regional_indicator_e:", ":regional_indicator_f:", ":regional_indicator_g:", ":regional_indicator_h:" }; if (!chess.IsOver) { var embed = new EmbedBuilder { Description = ((chess.IsCheck(chess.CurrentPlayerIndex)) ? "**Check!**\n":"") + $"*Đang chơi:* {MentionUtils.MentionUser(chess.Player[ChessBoard.WhitePlayerIndex])} *(trắng)* vs. " + $"{MentionUtils.MentionUser(chess.Player[ChessBoard.BlackPlayerIndex])} *(đen)*", Color = Color.Magenta }; embed.AddField("*Người chơi hiện tại:*", $"{MentionUtils.MentionUser(chess.Player[chess.CurrentPlayerIndex])}, {(chess.CurrentPlayerIndex == ChessBoard.WhitePlayerIndex ? "trắng" : "đen")}.") .AddField("*Nước đi trước đó:*", (chess.History.Count != 0) ? $"{ChessBoard.Icon[chess.History.Last().Item1]} {chess.History.Last().Item2}." : "Chưa có."); //await Channel.SendMessageAsync(embed: embed.Build()); await DiscordWrapper.SendMessage(Context, embed : embed.Build(), Channel : Channel); } else { if (chess.IsStaleMate) { var embed = new EmbedBuilder { Description = "**Stalemate!**\n" + $"Trận đấu giữa { MentionUtils.MentionUser(chess.Player[ChessBoard.WhitePlayerIndex]) } *(trắng)* và { MentionUtils.MentionUser(chess.Player[ChessBoard.BlackPlayerIndex]) } *(đen)* kết thúc với kết quả * Hoà *.", Color = Color.Orange }; //await Channel.SendMessageAsync(embed: embed.Build()); await DiscordWrapper.SendMessage(Context, embed : embed.Build(), Channel : Channel); } else if (chess.IsDraw) { var embed = new EmbedBuilder { Description = $"Trận đấu giữa { MentionUtils.MentionUser(chess.Player[ChessBoard.WhitePlayerIndex]) } *(trắng)* và { MentionUtils.MentionUser(chess.Player[ChessBoard.BlackPlayerIndex]) } *(đen)* kết thúc với kết quả *Hoà*.", Color = Color.Orange }; //await Channel.SendMessageAsync(embed: embed.Build()); await DiscordWrapper.SendMessage(Context, embed : embed.Build(), Channel : Channel); } else if (chess.IsCheckMate) { var embed = new EmbedBuilder { Description = "**Checkmate!**\n" + $"Trận đấu giữa {MentionUtils.MentionUser(chess.Player[ChessBoard.WhitePlayerIndex])} *(trắng)* và {MentionUtils.MentionUser(chess.Player[ChessBoard.BlackPlayerIndex])} *(đen)* kết thúc với kết quả: {MentionUtils.MentionUser(chess.WinnerId)} *thắng*!", Color = Color.Red }; //await ReplyAsync(embed: embed.Build()); await DiscordWrapper.SendMessage(Context, embed : embed.Build()); } else { var embed = new EmbedBuilder { Description = $"Trận đấu giữa {MentionUtils.MentionUser(chess.Player[ChessBoard.WhitePlayerIndex])} và {MentionUtils.MentionUser(chess.Player[ChessBoard.BlackPlayerIndex])} kết thúc với kết quả: {MentionUtils.MentionUser(chess.WinnerId)} *thắng*!", Color = Color.Red }; //await ReplyAsync(embed: embed.Build()); await DiscordWrapper.SendMessage(Context, embed : embed.Build()); } } // white below black string output = ""; for (var i = 7; i >= 0; i--) { output += numbers[i]; for (var j = 0; j < 8; j++) { if (chess.Board[i, j] != ChessBoard.Empty) { output += $" {ChessBoard.Icon[chess.Board[i, j]]}"; } else { output += $" {sqr[(i + j) % 2]}"; } } output += "\n"; if (i % 3 == 2) { await Channel.SendMessageAsync(output); output = ""; } } output += sqr[1]; for (var i = 0; i < 8; i++) { output += $" {letters[i]}"; } await Channel.SendMessageAsync(output); return(await Channel.GetMessagesAsync(4).FlattenAsync()); }
public async Task Parrot([Remainder] string text) { await Context.Message.DeleteAsync(); await DiscordWrapper.SendMessage(Context, text); }
public async Task New(string str2) { ulong UserId = Context.Message.Author.Id; await DiscordWrapper.SendMessage(Context, $"{MentionUtils.MentionUser(UserId)}, bạn có chắc muốn tạo ván đấu mới? (Yes/No)"); string content = null; SocketMessage msg; Stopwatch s = new Stopwatch(); s.Start(); do { msg = await NextMessageAsync(fromSourceUser : true, inSourceChannel : true, timeout : TimeSpan.FromMinutes(5)); if (msg == null) { break; } content = msg.Content.ToLower(); if (content == "yes" || content == "no") { break; } } while (s.Elapsed < TimeSpan.FromMinutes(5)); if (msg == null) { await DiscordWrapper.SendMessage(Context, $"Mèo không nhận được phản hồi của {MentionUtils.MentionUser(UserId)}... :cry:"); return; } else if (content == "no") { await DiscordWrapper.SendMessage(Context, $"Ván đấu mới sẽ không được tạo."); await Task.Delay(TimeSpan.FromSeconds(5)); await(Context.Channel as ITextChannel).DeleteMessagesAsync(await Context.Channel.GetMessagesAsync(4).FlattenAsync()); return; } await(Context.Channel as ITextChannel).DeleteMessagesAsync(await Context.Channel.GetMessagesAsync(2).FlattenAsync()); ChessBoard chess = new ChessBoard(); if (!MentionUtils.TryParseUser(str2, out chess.Player[1])) { var embed = new EmbedBuilder { Description = "Tên người chơi 2 không hợp lệ.", Color = Color.Magenta }; await Context.Channel.TriggerTypingAsync(); await ReplyAndDeleteAsync(content : null, embed : embed.Build(), timeout : TimeSpan.FromSeconds(5)); return; } chess.Player[0] = Context.Message.Author.Id; Save(ref chess); DiscordWrapper.Log($"chess new {MentionUtils.MentionUser(chess.Player[ChessBoard.WhitePlayerIndex]) } *(white)* vs { MentionUtils.MentionUser(chess.Player[ChessBoard.BlackPlayerIndex]) } *(black)*"); if (!(await Host())) { var embed = new EmbedBuilder { Description = $"Trận đấu giữa {MentionUtils.MentionUser(chess.Player[ChessBoard.WhitePlayerIndex])} và {MentionUtils.MentionUser(chess.Player[ChessBoard.BlackPlayerIndex])} đã tạm dừng.", Color = Color.Blue }; //await ReplyAsync(embed: embed.Build()); await DiscordWrapper.SendMessage(Context, embed : embed.Build()); } }
public async Task Remind(int h, int m, int day, int month, int year, [Remainder] string text) { try { for (int i = 0; i < 5 && _TaskList.isLocked(); i++) { var msg = await DiscordWrapper.SendMessage(Context, "Có lỗi xảy ra. Tự động thử lại sau 5s."); await Task.Delay(TimeSpan.FromSeconds(3)); await msg.DeleteAsync(); } if (_TaskList.isLocked()) { DiscordWrapper.Log($"Reminder: {h} {m} {day} {month} {year} {text} *from* {Context.Message.Author.Username} failed due to locked TaskList."); await Context.Channel.TriggerTypingAsync(); await ReplyAndDeleteAsync($"{Context.Message.Author.Mention}, đã thử lại quá 5 lần. Bạn vui lòng hãy đợi 1 phút và thử lại.", timeout : TimeSpan.FromMinutes(1)); return; } _TaskList.Lock(); DateTimeOffset dto = new DateTimeOffset(year, month, day, h, m, 0, TimeSpan.FromHours(7)); RemindedTask task = new RemindedTask(dto.ToUnixTimeSeconds(), text, Context.Message.Author.Id, Context.Guild.Id, Context.Channel.Id); if (task.unixTime < DateTimeOffset.UtcNow.ToUnixTimeSeconds() + 30) { DiscordWrapper.Log($"Reminder: {h} {m} {day} {month} {year} {text} *from* {Context.Message.Author.Username} failed due to invalid time."); await Context.Channel.TriggerTypingAsync(); await ReplyAndDeleteAsync($"{Context.Message.Author.Mention}, thời gian không hợp lệ. Hãy đặt thời gian cách hiện tại ít nhất 1 phút.", timeout : TimeSpan.FromMinutes(1)); return; } if (!_TaskList.Enqueue(task)) { await Context.Channel.TriggerTypingAsync(); await ReplyAndDeleteAsync($"{Context.Message.Author.Mention}, bạn đã lưu lời nhắc này trước đây.", timeout : TimeSpan.FromSeconds(10)); return; } DiscordWrapper.Log("saving"); if (!Save(_TaskList)) { DiscordWrapper.Log($"Reminder: {h} {m} {day} {month} {year} {text} *from* {Context.Message.Author.Username} save failed."); await Context.Channel.TriggerTypingAsync(); await ReplyAndDeleteAsync($"{Context.Message.Author.Mention}, có lỗi xảy ra trong quá trình lưu. Bạn hãy thử lại.", timeout : TimeSpan.FromMinutes(1)); _TaskList.Unlock(); return; } _TaskList.Unlock(); DiscordWrapper.Log("saved"); DiscordWrapper.Log($"Reminder: {h} {m} {day} {month} {year} {text} *from* {Context.Message.Author.Username} saved."); await Context.Channel.TriggerTypingAsync(); await ReplyAndDeleteAsync($"{Context.Message.Author.Mention}, đã lưu lời nhắc thành công!", timeout : TimeSpan.FromMinutes(1)); } catch (Exception e) { DiscordWrapper.Log($"{log} {e}"); _TaskList.Unlock(); DiscordWrapper.Log($"Reminder: {h} {m} {day} {month} {year} {text} *from* {Context.Message.Author.Username} save failed."); await Context.Channel.TriggerTypingAsync(); await ReplyAndDeleteAsync($"{Context.Message.Author.Mention}, có lỗi xảy ra. Bạn hãy thử lại.", timeout : TimeSpan.FromMinutes(1)); } }
public async Task Hi() { await DiscordWrapper.SendMessage(Context, $"Chào {Context.Message.Author.Mention}! Bạn khoẻ chứ? :cat:"); }
public async Task Meo() { await DiscordWrapper.SendMessage(Context, $"{Context.Message.Author.Mention}, *meow meeeow* <:heart_smile:685414591039012900>"); }
private async Task <bool> Move(string move, ISocketMessageChannel Channel) { try { ChessBoard chess = Load(); move = move.ToLower(); int x1 = move[1] - '1', y1 = move[0] - 'a', x2 = move[4] - '1', y2 = move[3] - 'a', pawn = chess.Board[x1, y1], color = ChessBoard.IsBlack(pawn) ? 6 : 0; int PlayerIndex = chess.CurrentPlayerIndex; if (!TryMove(move, save: true)) { return(false); } if (pawn == ChessBoard.Pawn + color) { //promo if ((PlayerIndex == ChessBoard.WhitePlayerIndex && x2 == ChessBoard.WhiteRank) || (PlayerIndex == ChessBoard.BlackPlayerIndex && x2 == ChessBoard.BlackRank)) { int[] promo = { ChessBoard.Queen + color, ChessBoard.Rook + color, ChessBoard.Bishop + color, ChessBoard.Knight + color }; await DiscordWrapper.SendMessage(Context, "move 1: Hậu; 2: Xe; 3: Tượng; 4: Mã"); SocketMessage msg; int ans = 0; Stopwatch s = new Stopwatch(); s.Start(); while (s.Elapsed < TimeSpan.FromMinutes(5)) { msg = await NextMessageAsync(fromSourceUser : false, inSourceChannel : true, timeout : TimeSpan.FromMinutes(5)); if (msg == null) { return(false); } if (msg.Author.Id != chess.Player[PlayerIndex] || !IsValidMessage(msg.Content)) { continue; } string subs = msg.Content.Substring(5); if (subs == "1" || subs == "2" || subs == "3" || subs == "4") { ans = subs[0] - '1'; break; } } s.Stop(); await(Context.Channel as ITextChannel).DeleteMessagesAsync(await Context.Channel.GetMessagesAsync(2).FlattenAsync()); chess.Board[x2, y2] = promo[ans]; if (!SetControl(ref chess)) { return(false); } if (!Save(ref chess)) { return(false); } } } return(true); } catch (Exception e) { DiscordWrapper.Log($"{log} {e}"); return(false); } }
private async Task <bool> Host() { try { IEnumerable <IMessage> print; ChessBoard chess; while (true) { chess = Load(); if (HasNoMove(chess.CurrentPlayerIndex)) { if (chess.IsCheck(chess.CurrentPlayerIndex)) { chess.SetGameResult(HasNoMove: true, chess.Player[chess.CurrentPlayerIndex ^ 1]); } else { chess.SetGameResult(HasNoMove: true); } Save(ref chess); await Print(); break; } print = await Print(); SocketMessage msg; Stopwatch s = new Stopwatch(); s.Start(); do { msg = await NextMessageAsync(fromSourceUser : false, inSourceChannel : true, timeout : TimeSpan.FromMinutes(5)); if (msg == null) { return(false); } if (msg.Author.Id == chess.Player[chess.CurrentPlayerIndex] && IsValidMessage(msg.Content)) { break; } } while (s.Elapsed < TimeSpan.FromMinutes(5)); s.Stop(); string move = msg.Content.Substring(5); if (move == "pause") { break; } else if (move == "draw") { ulong AskedPlayer = chess.Player[chess.CurrentPlayerIndex ^ 1]; await DiscordWrapper.SendMessage(Context, $"{MentionUtils.MentionUser(AskedPlayer)}, bạn có đồng ý hoà ván đấu này? (Yes/No)"); string content = null; SocketMessage msg_draw; s = new Stopwatch(); s.Start(); do { msg_draw = await NextMessageAsync(fromSourceUser : false, inSourceChannel : true, timeout : TimeSpan.FromMinutes(5)); if (msg_draw == null) { break; } content = msg_draw.Content.ToLower(); if (msg_draw.Author.Id == AskedPlayer && (content == "yes" || content == "no")) { break; } } while (s.Elapsed < TimeSpan.FromMinutes(5)); if (msg_draw == null) { await DiscordWrapper.SendMessage(Context, $"Người chơi {MentionUtils.MentionUser(AskedPlayer)} không phản hồi, trò chơi sẽ tiếp tục."); } else if (content == "no") { await DiscordWrapper.SendMessage(Context, $"Người chơi {MentionUtils.MentionUser(AskedPlayer)} không chấp nhận hoà, trò chơi sẽ tiếp tục."); } else { chess.SetGameResult(HasNoMove: false); Save(ref chess); await Print(); break; } } else if (move == "forfeit" || move == "surrender") { chess.SetGameResult(HasNoMove: false, chess.Player[chess.CurrentPlayerIndex ^ 1]); Save(ref chess); await Print(); break; } else if (!IsValidMove(move) || !await Move(move, Context.Channel)) { var embed = new EmbedBuilder { Description = $"{MentionUtils.MentionUser(chess.Player[chess.CurrentPlayerIndex])}, Nước đi {move} của bạn không hợp lệ. Hãy thử lại.", Color = Color.Magenta }; await Context.Channel.TriggerTypingAsync(); await ReplyAndDeleteAsync(content : null, embed : embed.Build(), timeout : TimeSpan.FromSeconds(5)); } await(Context.Channel as ITextChannel).DeleteMessagesAsync(print); } chess = Load(); return(chess.IsOver); } catch (Exception e) { DiscordWrapper.Log($"{log} {e}"); return(false); } }
public async Task Wait(int s, [Remainder] string text) { await Task.Delay(TimeSpan.FromMilliseconds(Math.Max(0, s * 1000 - 1900))); await DiscordWrapper.SendMessage(Context, $"*{Context.Message.Author.Mention}:*\n{text}"); }