示例#1
0
        public async Task ArchCounter(CommandContext ctx, [Description("Akcja")] string action = "value")
        {
            string actionLower = action.ToLower();

            switch (actionLower)
            {
            case "add":
                await PostEmbedHelper.PostEmbed(ctx, "ArchCounter", "Dodano. Aktualna ilość nieudanych instalacji: " + _archCounterService.IncrementCounter(ctx.Guild.Id));

                break;

            case "value":
                await PostEmbedHelper.PostEmbed(ctx, "ArchCounter", "Aktualna ilość nieudanych instalacji: " + _archCounterService.GetCounter(ctx.Guild.Id));

                break;

            case "reset":
                _archCounterService.ResetCounter(ctx.Guild.Id);
                await PostEmbedHelper.PostEmbed(ctx, "ArchCounter", "Zresetowano");

                break;

            default:
                await PostEmbedHelper.PostEmbed(ctx, "ArchCounter", "Dostępne akcje to: `add`, `value`, `reset`");

                break;
            }
        }
示例#2
0
        public async Task EightBallList(CommandContext ctx)
        {
            await ctx.TriggerTypingAsync();

            SimpleResponseResponse <List <SimpleResponseElement> > answers = _simpleResponseService.GetAnswers("8Ball");

            if (answers.Result == SimpleResponseResult.CommandHasNoResponses)
            {
                await PostEmbedHelper.PostEmbed(ctx, "8Ball", "Brak odpowiedzi w bazie. Najpierw coś dodaj");

                return;
            }

            StringBuilder builder = new StringBuilder();

            foreach (var answer in answers.Responses)
            {
                switch (answer.Type)
                {
                case Database.Models.StaticDB.SimpleResponseType.Text:
                    builder.AppendLine(answer.Content);
                    break;

                // Currently there's no way to append video link to embed
                case Database.Models.StaticDB.SimpleResponseType.ImageLink:
                case Database.Models.StaticDB.SimpleResponseType.YoutubeLink:
                case Database.Models.StaticDB.SimpleResponseType.Other:
                    break;
                }
            }
            await PostLongMessageHelper.PostLongMessage(ctx, answers.Responses.Select(p => p.Content).ToList(), "\n", "8Ball");
        }
示例#3
0
        public async Task ShowWelcomeMessage(CommandContext ctx)
        {
            await ctx.TriggerTypingAsync();

            var welcomeMessage = _welcomeMessageService.GetWelcomeMessage(ctx.Guild.Id);

            if (welcomeMessage.Exist == true)
            {
                StringBuilder Response = new StringBuilder();
                var           channel  = ctx.Guild.GetChannel(welcomeMessage.ChannelID.Value);
                if (channel != null)
                {
                    Response.Append("Kanał: ").AppendLine(channel.Name);
                }
                else
                {
                    Response.AppendLine("Kanał dla wiadomości powitalnej został usunięty");
                }

                Response.AppendLine("Treść: ").AppendLine(welcomeMessage.Content);

                await PostEmbedHelper.PostEmbed(ctx, "Wiadomość powitalna", Response.ToString());
            }
            else
            {
                await PostEmbedHelper.PostEmbed(ctx, "Wiadomość powitalna", "Na tym serwerze nie ma ustawionej wiadomości powitalnej");
            }
        }
示例#4
0
        public async Task DeleteRole(CommandContext ctx, [RemainingText] string message)
        {
            await ctx.TriggerTypingAsync();

            var serverRoles = ctx.Guild.Roles;
            var role        = serverRoles.Select(p => p).Where(q => q.Value.Name == message).FirstOrDefault();

            if (role.Value == null)
            {
                await PostEmbedHelper.PostEmbed(ctx, "System ról", $"{ctx.User.Mention} Rola `{message}` nie istnieje.");

                return;
            }

            if (!_assignRolesService.IsRoleOnList(role.Value.Id))
            {
                await PostEmbedHelper.PostEmbed(ctx, "System ról", $"{ctx.User.Mention} Roli `{message}` nie ma na liście.");

                return;
            }

            // User who triggered is owner, we can add role without problem or user who triggered isn't owner, we need to check if role is lower than the highest role he has
            var userTheHighestRolePosition = GetTheHighestRolePosition(ctx.Member.Roles.ToList());

            if (ctx.User == ctx.Guild.Owner || role.Value.Position < userTheHighestRolePosition)
            {
                // Add role to database
                _assignRolesService.RemoveRoleFromDatabase(ctx.Guild.Id, role.Value.Id);
                await PostEmbedHelper.PostEmbed(ctx, "System ról", $"{ctx.User.Mention} Rola `{message}` usunięta z listy ról.");
            }
            else
            {
                await PostEmbedHelper.PostEmbed(ctx, "System ról", $"{ctx.User.Mention} Nie możesz usunąć roli `{message}`, gdyż jest równa lub wyższa twojej najwyższej roli.");
            }
        }
示例#5
0
        public async Task HttpInu(CommandContext ctx, [Description("Numer kodu")] string numer = null)
        {
            await ctx.TriggerTypingAsync();

            //Jeżeli długość jest jeden nie podano kodu
            if (numer == null)
            {
                await ctx.RespondAsync("Składnia to `!httppies {kod}`. Napisz `!httppies kody` aby otrzymać listę dostępnych kodów.");
            }
            //Jeżeli podano kod, sprawdzamy czy można otrzymać takiego psa
            else if (HttpInuConst.Codes.Contains(numer))
            {
                var client = new WebClient();

                await PostEmbedHelper.PostEmbed(ctx, "Http pies", numer, "https://httpstatusdogs.com/img/" + ctx.Message.Content.Split(' ')[1] + ".jpg");
            }
            //Jeżeli użytkownik prosi o kody ppsów podajemy je
            else if (numer == "kody")
            {
                var availableCodes = "";
                foreach (var code in HttpInuConst.Codes)
                {
                    availableCodes += code;
                    availableCodes += " ";
                }

                await ctx.RespondAsync("Kody: " + availableCodes);
            }
            //Jeżeli nie można otrzymać psa informujemy o błędnym kodzie
            else
            {
                await ctx.RespondAsync("Błędny kod http. Napisz `!httppies kody` aby otrzymać listę dostępnych kodów.");
            }
        }
示例#6
0
        public async Task ShowRoles(CommandContext ctx)
        {
            await ctx.TriggerTypingAsync();

            var assignRoles = _assignRolesService.GetRoles(ctx.Guild.Id);

            if (assignRoles.Count == 0)
            {
                await PostEmbedHelper.PostEmbed(ctx, "System ról", "Na tym serwerze nie ma ról, które można sobie przypisać.");
            }
            else
            {
                // Get server roles.
                var serverRoles = ctx.Guild.Roles;

                List <DiscordRole> discordRoles = new List <DiscordRole>();
                foreach (ulong roleId in assignRoles)
                {
                    discordRoles.Add(serverRoles.Where(p => p.Value.Id == roleId).FirstOrDefault().Value);
                }
                discordRoles.RemoveAll(p => p == null);
                List <DiscordRole> sortedRoles = discordRoles.OrderBy(o => o.Name).ToList();
                await PostLongMessageHelper.PostLongMessage(ctx, sortedRoles.Select(p => p.Name).ToList(), null, "**Role dostępne na serwerze to:**");
            }
        }
示例#7
0
        public async Task SetWelcomeMessage(CommandContext ctx, [Description("Kanał do wysyłania wiadomości.")]  DiscordChannel channel, [Description("Treść wiadomości.")][RemainingText] string message)
        {
            await ctx.TriggerTypingAsync();

            _welcomeMessageService.SetWelcomeMessage(ctx.Guild.Id, channel.Id, message);
            await PostEmbedHelper.PostEmbed(ctx, "Wiadomość powitalna", "Ustawiono nową wiadomość powitalną");
        }
示例#8
0
        public async Task Picture(CommandContext ctx, [Description("Wpisz !pic list aby uzyskać listę dostępnych opcji.")] string pictureName = "", [Description("Wzmianka")] DiscordMember member = null)
        {
            await ctx.TriggerTypingAsync();

            using (var databaseContext = new StaticDBContext())
            {
                if (pictureName == "list")
                {
                    await ctx.RespondAsync($"Dostępne obrazki:\r\n\r\n{GetAvailableParameters()}");

                    return;
                }

                var pictureLink = databaseContext.Media
                                  .Where(vid => vid.Command.Name == "Picture" && vid.Names.Any(p => p.Name.ToLower() == pictureName.ToLower()))
                                  .Select(p => p.Link)
                                  .FirstOrDefault();

                if (pictureLink == null)
                {
                    await ctx.RespondAsync("Nieznany parametr, wpisz !pic list aby uzyskać listę dostępnych.");

                    return;
                }

                var response = pictureLink;

                await PostEmbedHelper.PostEmbed(ctx, "Obrazek", member?.Mention, response);
            }
        }
示例#9
0
        public async Task EightBall(CommandContext ctx, [Description("Twoje pytanie")][RemainingText] string question)
        {
            await ctx.TriggerTypingAsync();

            SimpleResponseResponse <SimpleResponseElement> answer = _simpleResponseService.GetAnswer("8Ball");

            if (answer.Result == SimpleResponseResult.CommandHasNoResponses)
            {
                await PostEmbedHelper.PostEmbed(ctx, "8Ball", "Brak odpowiedzi w bazie. Najpierw coś dodaj");

                return;
            }

            switch (answer.Responses.Type)
            {
            case Database.Models.StaticDB.SimpleResponseType.Text:
                await PostEmbedHelper.PostEmbed(ctx, "8Ball", "8Ball mówi: " + answer.Responses.Content);

                break;

            // Currently there's no way to append video link to embed
            case Database.Models.StaticDB.SimpleResponseType.ImageLink:
            case Database.Models.StaticDB.SimpleResponseType.YoutubeLink:
            case Database.Models.StaticDB.SimpleResponseType.Other:
                break;
            }
        }
示例#10
0
        public async Task HttpDuck(CommandContext ctx, [Description("Kod")] string code = null)
        {
            await ctx.TriggerTypingAsync();

            if (code == null)
            {
                await ctx.RespondAsync("Składnia to `!httpduck {kod}`. Napisz `!httpduck kody` aby otrzymać listę dostępnych kodów.");
            }
            //Jeżeli podano kod, sprawdzamy czy można otrzymać takiego kota
            else if (HttpDuckConst.Codes.Contains(code))
            {
                var client = new WebClient();

                await PostEmbedHelper.PostEmbed(ctx, "Duck!", code, $"https://random-d.uk/api/v1/http/{code}.jpg");
            }
            //Jeżeli użytkownik prosi o kody kotów podajemy je
            else if (code == "kody")
            {
                var builder = new StringBuilder();
                builder.Append("Kody: ");
                foreach (var c in HttpDuckConst.Codes)
                {
                    builder.Append($"{c} ");
                }

                await ctx.RespondAsync(builder.ToString());
            }
            //Jeżeli nie można otrzymać kota informujemy o błędnym kodzie
            else
            {
                await ctx.RespondAsync("Błędny kod http. Napisz `!httpduck kody` aby otrzymać listę dostępnych kodów.");
            }
        }
示例#11
0
        public async Task SayD(CommandContext ctx, [Description("Co chcesz powiedzieć?")][RemainingText] string message)
        {
            await ctx.TriggerTypingAsync();

            await ctx.Channel.DeleteMessageAsync(ctx.Message);

            await PostEmbedHelper.PostEmbed(ctx, "Bocik przemówił", message);
        }
示例#12
0
        public async Task NekoAlt(CommandContext ctx, DiscordMember member = null)
        {
            await ctx.TriggerTypingAsync();

            var client        = new WebClient();
            var cat           = client.DownloadString("http://aws.random.cat/meow");
            var nekoContainer = JsonConvert.DeserializeObject <NekoContainer>(cat);

            await PostEmbedHelper.PostEmbed(ctx, "Kot", member?.Mention, nekoContainer.File);
        }
示例#13
0
        public async Task Destroyed(CommandContext ctx)
        {
            await ctx.TriggerTypingAsync();

            await PostEmbedHelper.PostEmbed(ctx, "Repo destroyed - Abaddon the ship", null, $"https://media1.tenor.com/images/c2ba5bb955513c24cd503acbfa845901/tenor.gif");

            await PostEmbedHelper.PostEmbed(ctx, "Repo destroyed - Abaddon the ship", null, $"https://media1.tenor.com/images/575a65c9337f6830c0aa0c155cd4213b/tenor.gif");

            await PostEmbedHelper.PostEmbed(ctx, "Repo destroyed - Abaddon the ship", null, $"https://media1.tenor.com/images/882a987a82bc2365d282b08d6686f13a/tenor.gif");
        }
示例#14
0
        public async Task SendImage(CommandContext ctx, string endpoint, string title, [Description("Mention")] DiscordMember member = null)
        {
            await ctx.TriggerTypingAsync();

            var client           = new WebClient();
            var url              = client.DownloadString(endpoint);
            var pictureContainer = JsonConvert.DeserializeObject <NekosFileImage>(url);

            await PostEmbedHelper.PostEmbed(ctx, title, member?.Mention, pictureContainer.Url, footerText);
        }
示例#15
0
        public async Task Duck(CommandContext ctx)
        {
            await ctx.TriggerTypingAsync();

            var client = new WebClient();

            var duckJson      = client.DownloadString("https://random-d.uk/api/v1/random");
            var duckContainer = JsonConvert.DeserializeObject <DuckContainer>(duckJson);

            await PostEmbedHelper.PostEmbed(ctx, "Kaczka", imageLink : duckContainer.url, footerText : duckContainer.message);
        }
示例#16
0
        public async Task Xkcd(CommandContext ctx)
        {
            await ctx.TriggerTypingAsync();

            var randomIndex = _random.Next(0, MaxIndex);
            var link        = string.Format(RandomXkcdUrl, randomIndex);

            var client        = new WebClient();
            var url           = client.DownloadString(link);
            var xkcdContainer = JsonConvert.DeserializeObject <XkcdContainer>(url);

            await PostEmbedHelper.PostEmbed(ctx, xkcdContainer.Title, null, xkcdContainer.Img);
        }
示例#17
0
        public async Task Neko(CommandContext ctx, DiscordMember member = null)
        {
            await ctx.TriggerTypingAsync();

            var request = (HttpWebRequest)WebRequest.Create(_randomSiteURL);

            request.AllowAutoRedirect = true;

            using (var response = request.GetResponse())
            {
                await PostEmbedHelper.PostEmbed(ctx, "Kot", member?.Mention, response.ResponseUri.ToString());
            }
        }
示例#18
0
        public async Task Avatar(CommandContext ctx, [Description("Użytkownik, którego awatar chcesz.")] DiscordMember member = null)
        {
            await ctx.TriggerTypingAsync();

            if (member == null)
            {
                await PostEmbedHelper.PostEmbed(ctx, "Awatar", ctx.User.Mention, ctx.User.AvatarUrl);
            }
            else
            {
                await PostEmbedHelper.PostEmbed(ctx, "Awatar", member.Mention, member.AvatarUrl);
            }
        }
示例#19
0
        public async Task Avatar(CommandContext ctx, [Description("If you want other user's avatar, put his mention here.")] DiscordMember member = null)
        {
            await ctx.TriggerTypingAsync();

            if (member == null)
            {
                await PostEmbedHelper.PostEmbed(ctx, "Avatar", ctx.User.Mention, ctx.User.AvatarUrl);
            }
            else
            {
                await PostEmbedHelper.PostEmbed(ctx, "Avatar", member.Mention, member.AvatarUrl);
            }
        }
示例#20
0
        public async Task Inu(CommandContext ctx, DiscordMember member = null)
        {
            await ctx.TriggerTypingAsync();

            var          client = new WebClient();
            DogContainer dogContainer;

            var dog = client.DownloadString("https://random.dog/woof.json");

            dogContainer = JsonConvert.DeserializeObject <DogContainer>(dog);

            await PostEmbedHelper.PostEmbed(ctx, "Pies", member?.Mention, dogContainer.Url);
        }
示例#21
0
        public async Task MontyPython(CommandContext ctx, [Description("Użytkownik do wzmienienia.")] DiscordMember member = null)
        {
            await ctx.TriggerTypingAsync();

            SimpleResponseResponse <SimpleResponseElement> answer = _simpleResponseService.GetAnswer("MontyPython");

            if (answer.Result == SimpleResponseResult.CommandHasNoResponses)
            {
                await PostEmbedHelper.PostEmbed(ctx, "MontyPython", "Brak odpowiedzi w bazie. Najpierw coś dodaj");

                return;
            }

            switch (answer.Responses.Type)
            {
            case Database.Models.StaticDB.SimpleResponseType.Text:
                if (member == null)
                {
                    await PostEmbedHelper.PostEmbed(ctx, "MontyPython", answer.Responses.Content);
                }
                else
                {
                    await PostEmbedHelper.PostEmbed(ctx, "MontyPython", answer.Responses.Content + " " + member.Mention);
                }
                break;

            case Database.Models.StaticDB.SimpleResponseType.ImageLink:
                if (member == null)
                {
                    await PostEmbedHelper.PostEmbed(ctx, "MontyPython", null, answer.Responses.Content);
                }
                else
                {
                    await PostEmbedHelper.PostEmbed(ctx, "MontyPython", member.Mention, answer.Responses.Content);
                }
                break;

            // Currently there's no way to append video link to embed
            case Database.Models.StaticDB.SimpleResponseType.YoutubeLink:
            case Database.Models.StaticDB.SimpleResponseType.Other:
                if (member == null)
                {
                    await ctx.RespondAsync(answer.Responses.Content);
                }
                else
                {
                    await ctx.RespondAsync(answer.Responses.Content + " " + member.Mention);
                }
                break;
            }
        }
示例#22
0
        public async Task RemoveelcomeMessage(CommandContext ctx)
        {
            await ctx.TriggerTypingAsync();

            if (_welcomeMessageService.IsWelcomeMessageOnServer(ctx.Guild.Id))
            {
                _welcomeMessageService.RemoveWelcomeMessage(ctx.Guild.Id);
                await PostEmbedHelper.PostEmbed(ctx, "Wiadomość powitalna", "Wiadomość powitalna została usunięta.");
            }
            else
            {
                await PostEmbedHelper.PostEmbed(ctx, "Wiadomość powitalna", "Na serwerze nie ma wiadomości powitalnej.");
            }
        }
示例#23
0
        public async Task ChangeWelcomeMessageContent(CommandContext ctx, [Description("Nowa treść wiadomości.")][RemainingText] string message)
        {
            await ctx.TriggerTypingAsync();

            if (_welcomeMessageService.IsWelcomeMessageOnServer(ctx.Guild.Id))
            {
                _welcomeMessageService.ChangeWelcomeMessageContent(ctx.Guild.Id, message);
                await PostEmbedHelper.PostEmbed(ctx, "Wiadomość powitalna", "Zmieniono treść wiadomości powitalnej.");
            }
            else
            {
                await PostEmbedHelper.PostEmbed(ctx, "Wiadomość powitalna", "Najpierw ustaw wiadomość powitalną.");
            }
        }
示例#24
0
        public async Task ChangeWelcomeMessageChannel(CommandContext ctx, [Description("Nowy kanał do wysyłania wiadomości.")] DiscordChannel channel)
        {
            await ctx.TriggerTypingAsync();

            if (_welcomeMessageService.IsWelcomeMessageOnServer(ctx.Guild.Id))
            {
                _welcomeMessageService.ChangeWelcomeMessageChannel(ctx.Guild.Id, channel.Id);
                await PostEmbedHelper.PostEmbed(ctx, "Wiadomość powitalna", "Zmieniono kanał wiadomości powitalnej.");
            }
            else
            {
                await PostEmbedHelper.PostEmbed(ctx, "Wiadomość powitalna", "Najpierw ustaw wiadomość powitalną.");
            }
        }
示例#25
0
        //[Command("doggirl")]
        //[Description("Wyświetla słodkie doggirl.")]
        public async Task Dog(CommandContext ctx, [Description("Wzmianka")] DiscordMember member = null)
        {
            await ctx.TriggerTypingAsync();

            using (var databaseContext = new StaticDBContext())
            {
                // String.Equals doesn't work in SQLite provider (comparison is case sensitive) so it must be replaced with DbFunctions.Like().
                var dogGirl = databaseContext.SimpleResponses
                              .Where(catboy => catboy.Command.Name == "DogGirl")
                              .Select(p => p.Content)
                              .ToList();

                var wordIndex = random.Next(0, dogGirl.Count);
                var response  = dogGirl[wordIndex];

                await PostEmbedHelper.PostEmbed(ctx, "Dog girl", member?.Mention, response);
            }
        }
示例#26
0
        public async Task GiveRole(CommandContext ctx, [RemainingText] string message)
        {
            await ctx.TriggerTypingAsync();

            var serverRoles = ctx.Guild.Roles;
            var role        = serverRoles.Select(p => p).Where(q => q.Value.Name == message).FirstOrDefault();

            if (role.Value == null)
            {
                await PostEmbedHelper.PostEmbed(ctx, "System ról", $"{ctx.User.Mention} Rola `{message}` nie istnieje.");

                return;
            }

            if (HasUserRole(ctx.Member, role.Value))
            {
                await PostEmbedHelper.PostEmbed(ctx, "System ról", $"{ctx.User.Mention} Posiadasz już rolę `{message}`.");

                return;
            }

            if (_assignRolesService.IsRoleOnList(role.Value.Id))
            {
                if (!CanBotModifyThisRole(role.Value, ctx.Guild.CurrentMember.Roles.ToList()))
                {
                    await PostEmbedHelper.PostEmbed(ctx, "System ról", $"{ctx.User.Mention} Moje role są za nisko abym mógł nadać rolę `{message}`.");

                    return;
                }

                await ctx.Member.GrantRoleAsync(role.Value, "Rola nadana przez bota przy użyciu systemu nadawania ról. Działanie zostało zainicjowane przez użytkownika.");

                await PostEmbedHelper.PostEmbed(ctx, "System ról", $"{ctx.User.Mention} Rola `{message}` nadana.");
            }
            else
            {
                await PostEmbedHelper.PostEmbed(ctx, "System ról", $"{ctx.User.Mention} Roli `{message}` nie ma na liście.");
            }
        }
示例#27
0
文件: Bot.cs 项目: Tearth/SKNIBot
        private async Task Commands_CommandErrored(CommandsNextExtension extension, CommandErrorEventArgs e)
        {
            e.Context.Client.Logger.Log(LogLevel.Error, $"{e.Context.User.Username} tried executing '{e.Command?.QualifiedName ?? "<unknown command>"}' but it errored: {e.Exception.GetType()}: {e.Exception.Message ?? "<no message>"}.");

            StringBuilder messageToSend = new StringBuilder();

            switch (e.Exception)
            {
            case ChecksFailedException ex:
            {
                messageToSend.Append("Brak wystarczających uprawnień").AppendLine();

                var failedChecks = ex.FailedChecks;
                foreach (var failedCheck in failedChecks)
                {
                    if (failedCheck is RequireBotPermissionsAttribute failBot)
                    {
                        messageToSend.Append("Ja potrzebuję");
                        messageToSend.Append(": ");
                        messageToSend.Append(failBot.Permissions.ToPermissionString());
                        messageToSend.AppendLine();
                    }
                    else if (failedCheck is RequireUserPermissionsAttribute failUser)
                    {
                        messageToSend.Append("Ty potrzebujesz");
                        messageToSend.Append(": ");
                        messageToSend.Append(failUser.Permissions.ToPermissionString());
                        messageToSend.AppendLine();
                    }
                    else if (failedCheck is RequireOwnerAttribute)
                    {
                        messageToSend.Append("Tylko mój włąściciel może to wykonać");
                        messageToSend.AppendLine();
                    }
                }

                messageToSend.Append($"---------------------------\n");
                messageToSend.Append($"**{e.Exception.Message}**\n");
                messageToSend.Append($"{e.Exception.StackTrace}\n");

                await PostEmbedHelper.PostEmbed(e.Context, "Błąd", messageToSend.ToString());

                return;
            }

            case UnauthorizedException _:
            {
                messageToSend.Append($"---------------------------\n");
                messageToSend.Append($"**{e.Exception.Message}**\n");
                messageToSend.Append($"{e.Exception.StackTrace}\n");
                await e.Context.Member.SendMessageAsync(messageToSend.ToString());

                return;
            }

            default:
            {
                messageToSend.Append($"**{e.Exception.Message}**\n");
                messageToSend.Append($"{e.Exception.StackTrace}\n");

                await PostEmbedHelper.PostEmbed(e.Context, "Błąd", messageToSend.ToString());

                return;
            }
            }
        }