Esempio n. 1
0
    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}.");
        }
    }
Esempio n. 2
0
    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());
    }
Esempio n. 5
0
    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}");
    }
Esempio n. 6
0
    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));
        }
    }
Esempio n. 7
0
    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}");
    }
Esempio n. 8
0
    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());
    }
Esempio n. 12
0
    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());
    }
Esempio n. 14
0
    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());
        }
    }
Esempio n. 16
0
    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));
        }
    }
Esempio n. 17
0
 public async Task Hi()
 {
     await DiscordWrapper.SendMessage(Context, $"Chào {Context.Message.Author.Mention}! Bạn khoẻ chứ? :cat:");
 }
Esempio n. 18
0
 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);
        }
    }
Esempio n. 21
0
    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}");
    }