示例#1
0
        public async Task GetItem([Remainder] string name)
        {
            var message = await ReplyAsync("Getting data...");

            var database = new RiotData();
            //var item = database.Items.FirstOrDefault(x => x.name.ToLower().Equals(name.ToLower()));
            var     itemList = database.Items.Where(x => x.name.ToLower().Equals(name.ToLower())).Include(i => i.gold).ToList();
            ItemDto item     = null;

            Discord.EmbedBuilder builder = null;
            if (itemList.Count > 1)
            {
                var items = database.Items.Where(x => x.name.ToLower().Contains(name.ToLower())).ToList();
                builder = Builders.BaseBuilder("Multiple items found", "", Color.Red, null, "");
                string itemsstring = "";
                items.ForEach(x => itemsstring += x.name + "\n");
                builder.AddField("Items", itemsstring);
                await ReplyAsync("", embed : builder.Build());
            }
            else
            {
                var items = database.Items.Include(x => x.gold).Where(x => x.name.ToLower().Contains(name.ToLower())).ToList();
                if (items.Count == 1)
                {
                    item    = items[0];
                    builder = Builders.BaseBuilder("", "", Color.DarkBlue,
                                                   new EmbedAuthorBuilder().WithName(item.name),
                                                   $"http://ddragon.leagueoflegends.com/cdn/6.24.1/img/item/{item.ItemId}.png");
                    builder.AddField("Effect", item.plaintext);
                    builder.AddField("Tooltip",
                                     Regex.Replace(item.description.Replace("<br>", "\n"), "<.*?>", String.Empty));
                    builder.AddField("Cost", $"**Total: **{item.gold.total}\n" +
                                     $"**Base: **{item.gold.Base}");
                    if (!string.IsNullOrEmpty(item.requiredChampion))
                    {
                        builder.AddField("Required Champion", item.requiredChampion);
                    }
                    if (item.consumed)
                    {
                        builder.AddField("Consumable",
                                         $"This item is a consumable and a play can have {item.stacks} of this item at a time.");
                    }
                    await ReplyAsync("", embed : builder.Build());
                }
                else if (items.Count > 1)
                {
                    builder = Builders.BaseBuilder("Multiple items found", "", Color.Red, null, "");
                    string itemsstring = "";
                    items.ForEach(x => itemsstring += x.name + "\n");
                    builder.AddField("Items", itemsstring);
                    await ReplyAsync("", embed : builder.Build());
                }
                else
                {
                    builder = Builders.ErrorBuilder("Item not found");
                    await ReplyAsync("", embed : builder.Build());
                }
            }
            await message.DeleteAsync();
        }
示例#2
0
        public void SendLogStart(string starter)
        {
            if (Message != null)
            {
                return;
            }
            var embed = new Discord.EmbedBuilder();

            if (Program.BOT_DEBUG)
            {
                embed.Title = "Debug Game Started";
                embed.Color = Discord.Color.Red;
            }
            else
            {
                embed.Title = "Online Game Started";
            }
            embed.WithUrl(MLAPI.Handler.LocalAPIUrl + "/chess/online");
            embed.WithDescription($"{starter} has started an cross-network game of chess.\n" +
                                  $"Click the link title above to view.\n" +
                                  $"To play or spectate, you will need to [review the Terms]({MLAPI.Handler.LocalAPIUrl}/chess/terms#online), " +
                                  $"then [download the client](https://github.com/CheAle14/bot-chess/releases/latest/download/ChessInstaller.exe)");
            var msg = ChessS.DiscussionChannel.SendMessageAsync("[...]", embed: embed.Build()).Result;

            Message = msg;
            updateBoard();
        }
示例#3
0
        public async Task Mastery(string region, string summonerName, string championName)
        {
            RiotData   data       = new RiotData();
            RiotClient riotClient = new RiotClient(OptionManager.RiotKey);

            DataLibrary.Champion champion = null;
            Discord.EmbedBuilder builder  = null;
            var championList = data.Champions.Where(x => x.name.ToLower().Equals(championName.ToLower())).ToList();

            if (championList.Count < 1)
            {
                championList = new RiotData().Champions.Where(x => x.name.ToLower().Contains(championName.ToLower()))
                               .ToList();
            }
            champion = championList[0];
            if (champion != null)
            {
                var summoner        = riotClient.Summoner.GetSummonerByName(summonerName, PlatformHelper.StringToPlatform(region));
                var masteries       = riotClient.Masteries.GetchampionMasteries(PlatformHelper.StringToPlatform(region), summoner.SummonerId);
                var championMastery = masteries.FirstOrDefault(x => x.ChampionId == champion.ChampionId);
                builder = Builders.BaseBuilder($"{summoner.Name} mastery for {champion.name}", "", Color.DarkBlue, null, $"http://ddragon.leagueoflegends.com/cdn/6.24.1/img/champion/{champion.key}.png");
                builder.AddInlineField("Level", championMastery.Level);
                builder.AddInlineField("Points", championMastery.ChampionPoints);
            }
            else
            {
                builder = Builders.ErrorBuilder("Champion was not found");
            }

            await ReplyAsync("", embed : builder.Build());
        }
示例#4
0
        private async Task SendQuote(int number, string quote, IMessageChannel channel)
        {
            var msg = new Discord.EmbedBuilder();

            msg.Title = ":hash: Quote " + number;

            var res = "";

            foreach (var line in ParseQuote(quote))
            {
                if (line.Item1 != null)
                {
                    if (line.Item1.StartsWith("!"))
                    {
                        res += $"***{line.Item1.Substring(1).TrimStart()}** { line.Item2.TrimEnd() }*\r\n";
                    }
                    else
                    {
                        res += $"<**{line.Item1.Trim()}**> { line.Item2 } \r\n";
                    }
                }
                else
                {
                    res += $"{ line.Item2 }\r\n";
                }
            }

            msg.Description = res;
            msg.Color       = Color.Red;

            await channel.SendMessageAsync("", embed : msg.Build());
        }
示例#5
0
        void help(ServerMessage e, String m)
        {
            /*            var eb = new EmbedBuilder();
             *          eb = eb.WithAuthor("The Overbork", this.DC.CurrentUser.GetAvatarUrl()).WithCurrentTimestamp().WithTitle("Help");
             *          const int maxFieldSize = 1024;
             *          for(int i = 0; i < ((botInfo.Length + (maxFieldSize-1)) / maxFieldSize); i++)
             *          {
             *              int remLen = botInfo.Length - i * maxFieldSize;
             *              int len = remLen < maxFieldSize ? remLen : maxFieldSize;
             *              eb = eb.AddField("help" + i, botInfo.Substring(i * maxFieldSize, len));
             *          }
             *          safeSendEmbed(e.Channel, eb.Build());*/
            /*            safeSendMessage(e.Channel,
             * "Standing by for orders, " + e.Author.Username + @"!
             *
             * " + botInfo, true);*/
            var     parts = m.Split(" ".ToArray(), StringSplitOptions.RemoveEmptyEntries);
            Command com;

            if (parts.Length > 0 && Commandlist.TryGetValue(parts[0], out com) && shouldDisplayHelp(com, e.Author, e.Channel))
            {
                safeSendEmbed(e.Channel, com.getHelpMessageEmbed());
            }
            else
            {
                var eb = new Discord.EmbedBuilder().WithAuthor("The Overbork", this.DC.CurrentUser.GetAvatarUrl()).WithCurrentTimestamp();
                eb.WithTitle("Available commands").WithDescription("This is a list of all commands currently available to you. For help with a particular command, try !help followed by that command name. ```" + getCommandListForUser(e.Author, e.Channel) + "```");
                safeSendEmbed(e.Channel, eb.Build());
            }
        }
示例#6
0
        public async Task Search([Remainder] string name)
        {
            var root = RequestHandler.GetAmiibo(name);

            foreach (var amiibo in root.amiibo)
            {
                Discord.EmbedBuilder builder = Builders.BaseBuilder("", "", Color.DarkMagenta,
                                                                    new EmbedAuthorBuilder().WithName("AmiiboAPI's Results").WithUrl("http://www.amiiboapi.com"), null);
                builder.AddInlineField("General Information",
                                       "**Name: **" + amiibo.Name + "\n" +
                                       "**Amiibo Series: **" + amiibo.Series + "\n" +
                                       "**Game Series: **" + amiibo.GameSeries);
                builder.AddInlineField("Releases",
                                       "**NA:** " + Convert.ToDateTime(amiibo.Releases.na).ToLongDateString() + "\n" +
                                       "**EU: **" + Convert.ToDateTime(amiibo.Releases.eu).ToLongDateString() + "\n" +
                                       "**JP: **" + Convert.ToDateTime(amiibo.Releases.jp).ToLongDateString() + "\n" +
                                       "**AU: **" + Convert.ToDateTime(amiibo.Releases.au).ToLongDateString());
                try
                {
                    builder.WithImageUrl(amiibo.ImageURL);
                }
                catch { }
                await ReplyAsync("", embed : builder.Build());
            }
        }
示例#7
0
        private async Task Bot_GuildAdded(SocketGuild arg)
        {
            var cfg = await this.GuildRepo.GetConfig(arg);

            await Log.ConsoleOUT($"New Guild: {arg.Name}");


            //Log a message to the logging server.
            try
            {
                //Build embed.
                EmbedBuilder eb = new EmbedBuilder()
                                  .WithTitle("Guild Created")
                                  .WithColor(Color.Green)
                                  .AddField("Guild", arg.Name)
                                  .AddField("Members", arg.Users.Count);

                await Log.sendToChannel(LogChannel.GuildActivity, eb.Build());
            }
            catch (Exception ex)
            {
                await Log.Error(arg, ex);
            }

            //Send a welcome message to the guild.
            try
            {
                var CH = await ChannelHelper.FindChannel_For_Welcome_Message(arg);

                if (CH != null)
                {
                    //Publish a Welcome Message.

                    var eb = new Discord.EmbedBuilder()
                             .WithTitle("WarBOT")
                             .WithColor(Color.Green)
                             .WithDescription("Thanks for inviting me to your server. I will send you notifications related to Hustle Castle war events.")
                             .AddField("_ _", "_ _")
                             .AddField("For Help", $"Just type 'bot, help' or {arg.CurrentUser.Mention} help")
                             .AddField("For Support", "Either click this message or contact <@381654208073433091>.")
                             .AddField("**Setup**", "Have a server admin type: **bot, setup**")
                             .WithUrl("https://github.com/XtremeOwnage/WarBot")
                             .WithImageUrl("http://i1223.photobucket.com/albums/dd516/ericmck2000/download.jpg");

                    await CH.SendMessageAsync(embed : eb.Build());
                }
                else
                {
                    await Log.Error(arg, new Exception("Unable to send my welcome message. No permissions."));
                }
            }
            catch (Exception ex)
            {
                await Log.Error(arg, ex);
            }
        }
示例#8
0
        public async Task Games()
        {
            var games = RequestHandler.GetGames();

            Discord.EmbedBuilder builder = Builders.BaseBuilder("", "", ColorPicker.SmashModule,
                                                                null, "");
            string message = "";

            games.ForEach(x => message += x.Name + "\n");
            builder.AddField(new EmbedFieldBuilder().WithValue(message).WithName("All games playable on " + Names.SmashLadder));
            await ReplyAsync("", embed : builder.Build());
        }
示例#9
0
        public async Task help()
        {
            var a = new Discord.EmbedBuilder();

            a.WithTitle("Commands");
            a.WithDescription("``<<help`` - Gives list of commands to use" +
                              "\n``<<invite`` - Sends you bot invite link in DMs" +
                              "\n``<<search [your request]`` - Information about artist/album/track" +
                              "\n``<<listen [minutes]`` - Listens to your Spotify activity and gives statistics" +
                              "\n``<<listen [minutes] [@mention]`` - Listens to custom user's Spotify activity");
            a.WithColor(Color.Magenta);
            await Context.Channel.SendMessageAsync("", false, a.Build());
        }
示例#10
0
        public async Task KickUserAsync(string mention = null, [Remainder] string reason = null)
        {
            IGuildUser user;

            user = Context.Guild.GetUser(MentionUtils.ParseUser(mention));
            var b = new Discord.EmbedBuilder();

            b.WithTitle("User Kicked");
            b.WithDescription(user.Username + "was kicked.");
            await Context.Channel.SendMessageAsync("", false, b.Build());

            await user.KickAsync();
        }
示例#11
0
        private async Task SendChipAsEmbed(SocketMessage message, Chip toSend)
        {
            var embed = new Discord.EmbedBuilder
            {
                Title = toSend.Name
            };

            if (toSend.Type == "Mega")
            {
                embed.Color = new Color(0x90F8F8); //Megachip Blue
            }
            else if (toSend.Type == "Giga")
            {
                embed.Color = new Color(0xF8C8D8);
            }
            MemoryStream imageStream = new MemoryStream();

            ChipImages.Instance.GetElement(toSend.Element).Save(imageStream, System.Drawing.Imaging.ImageFormat.Png);
            //File.WriteAllBytes("./test.png", imageStream.GetBuffer());
            embed.AddField("Element:", String.Join(", ", toSend.Element), true);
            if (toSend.Skill[0] != "--")
            {
                embed.AddField("Skill", String.Join(", ", toSend.Skill), true);
            }
            embed.ThumbnailUrl = "attachment://unknown.png";
            //embed.ThumbnailUrl = ChipImages.fireURL;
            embed.AddField("Range:", toSend.Range, true);
            if (toSend.Damage != "--")
            {
                embed.AddField("Damage:", toSend.Damage, true);
            }
            if (!toSend.Hits.StartsWith('0'))
            {
                embed.AddField("Hits:", toSend.Hits, true);
            }
            //embed.AddField("Description:", toSend.Description);
            embed.WithDescription(toSend.Description);
            embed.WithFooter(toSend.Type);
            var valToSend = embed.Build();

            //Console.WriteLine(imageStream.Position);
            imageStream.Seek(0, SeekOrigin.Begin); //reset to the beginning because apparently not automatic
                                                   //await message.Channel.SendMessageAsync(embed: valToSend);
                                                   //await message.Channel.SendFileAsync(imageStream, "b1nzy.png");
                                                   //embed: new EmbedBuilder {ImageUrl = "attachment://b1nzy.png"}.Build());
            await message.Channel.SendFileAsync(imageStream, "unknown.png", embed : valToSend);

            imageStream.Dispose();
        }
示例#12
0
        static Embed genLangList()
        {
            EmbedBuilder em = new Discord.EmbedBuilder();

            em.Color = Discord.Color.Blue;
            em.Title = "Supported Languages:";
            string str = "";

            foreach (KeyValuePair <string, int> key in RextesterHelper.languages)
            {
                str += $"{key.Key}\n";
            }
            em.Description = str;
            return(em.Build());
        }
示例#13
0
        static Embed genYtComment(CommentSnippet comment)
        {
            EmbedBuilder em = new Discord.EmbedBuilder();

            em.Color = Discord.Color.Blue;
            EmbedAuthorBuilder eab = new EmbedAuthorBuilder();

            eab.Url     = comment.AuthorChannelUrl;
            eab.Name    = comment.AuthorDisplayName;
            eab.IconUrl = comment.AuthorProfileImageUrl;
            em.Author   = eab;
            EmbedFooterBuilder emfb = new EmbedFooterBuilder();

            emfb.Text      = $"{comment.LikeCount} likes";
            em.Footer      = emfb;
            em.Description = comment.TextDisplay;
            return(em.Build());
        }
示例#14
0
        private async Task GuildLeaveLog(SocketGuild guild)
        {
            var logChannel = _client.GetChannel(647167484616769566) as SocketTextChannel;

            var embed = new Discord.EmbedBuilder()
            {
                Title = "📤 Left guild 📤",
                Color = Discord.Color.Red
            };

            embed.AddField("Name", guild.Name, true);
            embed.AddField("ID", guild.Id, true);
            embed.WithFooter($"Now in {_client.Guilds.Count.ToString()} guilds.");
            embed.WithCurrentTimestamp();

            //await logChannel.SendMessageAsync($"📤 Left guild \"{guild.Name}\" (`{guild.Id}`). Now in {_client.Guilds.Count.ToString()} guilds.");
            await logChannel.SendMessageAsync("", embed : embed.Build());
        }
示例#15
0
        public async Task UserInfo(SocketGuildUser user)
        {
            var perms    = user.GuildPermissions.ToList();
            var allPerms = string.Join(", ", perms);

            if (user != null)
            {
                var answer = new Discord.EmbedBuilder();
                answer.WithColor(40, 200, 150);
                answer.ThumbnailUrl = user.GetAvatarUrl(ImageFormat.Auto);
                answer.AddField("User Info for " + user, "UserID | " + user.Id);
                //answer.AddInlineField("User Nickname" + "", user.Nickname);
                answer.AddInlineField("Server Permissions ", allPerms);
                answer.AddInlineField("Joined Server at", user.JoinedAt);
                answer.AddInlineField("Joined Discord at ", user.CreatedAt.DateTime.ToLongDateString());
                answer.AddInlineField("User Status ", user.Status);
                await Context.Channel.SendMessageAsync("", false, answer.Build());
            }
        }
        public async Task Github()
        {
            //response embed:
            var embed = new Discord.EmbedBuilder();

            embed.Title       = "GitHub";
            embed.Url         = "https://github.com/bman46/InstagramEmbedDiscordBot";
            embed.Description = "View the source code, download code to host your own version, contribute to the bot, and file issues for improvements or bugs. [Github](https://github.com/bman46/InstagramEmbedDiscordBot)";
            embed.WithColor(new Color(131, 58, 180));

            ButtonBuilder buttonGithub = new ButtonBuilder();

            buttonGithub.Label = "GitHub";
            buttonGithub.Style = ButtonStyle.Link;
            buttonGithub.Url   = "https://github.com/bman46/InstagramEmbedDiscordBot";
            ComponentBuilder component = new ComponentBuilder().WithButton(buttonGithub);

            await RespondAsync(embed : embed.Build(), ephemeral : true, components : component.Build());
        }
示例#17
0
        static Embed genTwitter(ITweet tweet)
        {
            EmbedBuilder em = new Discord.EmbedBuilder();

            em.Color = Discord.Color.Blue;
            EmbedAuthorBuilder eab = new EmbedAuthorBuilder();

            eab.Url     = $"https://twitter.com/{tweet.CreatedBy.ScreenName}";
            eab.Name    = $"{tweet.CreatedBy.Name} (@{tweet.CreatedBy.ScreenName})";;
            eab.IconUrl = tweet.CreatedBy.ProfileImageUrlFullSize;
            em.Author   = eab;
            EmbedFooterBuilder emfb = new EmbedFooterBuilder();

            emfb.Text      = $"{tweet.RetweetCount} Retweets, {tweet.FavoriteCount} Likes";
            em.Footer      = emfb;
            em.Description = tweet.FullText;
            em.Timestamp   = new DateTimeOffset(tweet.CreatedAt);
            return(em.Build());
        }
示例#18
0
        public static async Task <bool> noStockToDiscord(string productUrl, string imageUrl, string title, string shoePrice)
        {
            var discordClient = new DiscordWebhookClient(479893514260578305, "GGoikx-zcZpvkX0VsrmogElUfJsxqgbhvkhr9Xc5yVjksZeFghsKIu0OdAteQdVK_S3j");

            var builder = new Discord.EmbedBuilder()
                          .WithDescription(productUrl)
                          .WithUrl(productUrl)
                          .AddField("Retail Price", shoePrice)
                          .WithColor(new Color(0xffffff))
                          .WithFooter(footer =>
            {
                footer
                .WithText("Easy Restock " + DateTime.Now);
            })
                          .WithThumbnailUrl(imageUrl)
                          .WithAuthor(author =>
            {
                author
                .WithName("Shopify Monitor");
            })
                          .AddField("New product loaded", "(Stock potentially coming soon!)");
            var  embed  = new[] { builder.Build() };
            bool posted = false;

            while (posted == false)
            {
                try
                {
                    await discordClient.SendMessageAsync("```" + title + "```", false, embed).ConfigureAwait(false);

                    posted = true;
                }
                catch (Discord.Net.RateLimitedException)
                {
                    Console.WriteLine("Too many restocks Happenning");
                    System.Threading.Thread.Sleep(5000);
                    posted = false;
                    continue;
                }
            }
            return(true);
        }
示例#19
0
        public static async Task <bool> StockExists(string url, GlossaryOfProducts secondParse, int i)
        {
            var discordClient = new DiscordWebhookClient(479893514260578305, "GGoikx-zcZpvkX0VsrmogElUfJsxqgbhvkhr9Xc5yVjksZeFghsKIu0OdAteQdVK_S3j");

            var builder = new Discord.EmbedBuilder()
                          .WithTitle(secondParse.products[i].title)
                          .WithUrl(url + "/products/" + secondParse.products[i].handle)
                          .WithColor(new Color(0xffffff))
                          .WithFooter(footer =>
            {
                footer
                .WithText("Easy Restock " + DateTime.Now);
            })
                          .WithThumbnailUrl(secondParse.products[i].images[0].src)
                          .WithAuthor(author =>
            {
                author
                .WithName("Shopify Monitor");
            })
                          .AddField("Product Updated", "(Stock potentially coming soon!)");
            var  embed  = new[] { builder.Build() };
            bool posted = false;

            while (posted == false)
            {
                try
                {
                    await discordClient.SendMessageAsync("", false, embed).ConfigureAwait(false);

                    posted = true;
                }
                catch (Discord.Net.RateLimitedException)
                {
                    Console.WriteLine("Too many restocks Happenning");
                    System.Threading.Thread.Sleep(5000);
                    posted = false;
                    continue;
                }
            }
            return(true);
        }
示例#20
0
        public async Task UserAvatarAsync(string mention = null)
        {
            IUser user;

            if (mention == null)
            {
                user = Context.User;
            }
            else
            {
                user = Context.Guild.GetUser(MentionUtils.ParseUser(mention));
            }

            var b = new Discord.EmbedBuilder();

            b.WithTitle(user.Username + "'s Avatar");
            b.WithImageUrl(user.GetAvatarUrl());
            await Context.Channel.SendMessageAsync("", false, b.Build());

            //await Context.Channel.SendMessageAsync(user.Username);
        }
示例#21
0
        public async Task OnCommandExecutedAsync(Optional <CommandInfo> command, ICommandContext context, IResult result)
        {
            if (!string.IsNullOrWhiteSpace(result?.ErrorReason) && result.Error != CommandError.UnknownCommand /*&& result.Error != CommandError.UnmetPrecondition && result.Error != CommandError.ParseFailed && result.Error != CommandError.BadArgCount*/)
            {
                var errorEmbed = new Discord.EmbedBuilder()
                {
                    Title       = "Error",
                    Description = result.ErrorReason,
                    Color       = Discord.Color.Red
                };
                errorEmbed.WithCurrentTimestamp();
                errorEmbed.WithFooter("If you think this is a bug, please report it in the #support channel in our server (~support).");
                await context.Channel.SendMessageAsync("", embed : errorEmbed.Build());
                await Log(new LogMessage(LogSeverity.Error, "Command", $"A command errored. Message: [{context.Message.Content}] | Error reason: [{result.ErrorReason}] | Guild: [{context.Guild.Name} ({context.Guild.Id})]"));

                return;
            }

            var commandName = command.IsSpecified ? command.Value.Name : "Unknown Command";

            await Log(new LogMessage(LogSeverity.Info, "Command", $"A command executed successfully. Message: [{context.Message.Content}] | Command: [{commandName}] | Guild: [{context.Guild.Name} ({context.Guild.Id})]"));
        }
示例#22
0
        public async Task UserInfoAsync(string mention = null)
        {
            IUser user;

            if (mention == null)
            {
                user = Context.User;
            }
            else
            {
                user = Context.Guild.GetUser(MentionUtils.ParseUser(mention));
            }

            var b = new Discord.EmbedBuilder();

            b.WithTitle("User Info");
            b.WithDescription("Name: " + user.Username + "\n" +
                              "ID: " + user.ToString() + "\n" +
                              "UID: " + user.Id + "\n" +
                              "Status: " + user.Status + "\n" +
                              "Current Activity: " + user.Activity + "\n");
            await Context.Channel.SendMessageAsync("", false, b.Build());
        }
        static Embed generateTest()
        {
            EmbedBuilder em = new Discord.EmbedBuilder();

            em.Color = Discord.Color.Blue;
            em.Title = "Title";
            EmbedAuthorBuilder eab = new EmbedAuthorBuilder();

            eab.Url        = "http://www.google.com/";
            eab.Name       = "Embed Author Name";
            eab.IconUrl    = "https://i.imgur.com/2HXCkSR.png";
            em.Author      = eab;
            em.Description = "Description";
            EmbedFooterBuilder emfb = new EmbedFooterBuilder();

            emfb.IconUrl    = "https://i.imgur.com/Pieqv0h.png";
            emfb.Text       = "Footer text";
            em.Footer       = emfb;
            em.ImageUrl     = "https://i.imgur.com/Wks5VLA.png";
            em.ThumbnailUrl = "https://i.imgur.com/asc2NGx.png";
            em.Timestamp    = new DateTimeOffset(new DateTime(2042, 4, 20, 4, 20, 42));
            return(em.Build());
        }
示例#24
0
        public async Task GetInfo([Remainder] string name)
        {
            Discord.EmbedBuilder builder = null;
            var root = RequestHandler.GetTournamentRoot(name);

            if (root.entities != null)
            {
                if (!root.entities.tournament.Private)
                {
                    var tournament = root.entities.tournament;
                    builder = Builders.BaseBuilder(tournament.name, "", Color.DarkGreen, null,
                                                   null);
                    var baseDate  = new DateTime(1970, 1, 1, 0, 0, 0);
                    var startDate = baseDate.AddSeconds(tournament.startAt);
                    var endDate   = baseDate.AddSeconds(tournament.endAt);
                    builder.AddField("Information",
                                     $"**Name: **{tournament.name}\n" +
                                     $"**Venue: **{tournament.venueName}\n" +
                                     $"**Venue Adress: **{tournament.venueAddress}\n" +
                                     $"**Timezone: **{tournament.timezone.Replace("/", " ").Replace("_", "")}\n" +
                                     $"**From **{startDate.ToLongDateString()} \n" +
                                     $"**To:** {endDate.ToLongDateString()}");
                    if (root.entities.videogame != null && root.entities.videogame.Count < 20)
                    {
                        foreach (var game in root.entities.videogame)
                        {
                            var    events = root.entities.Event.Where(x => x.videogameId == game.id).ToList();
                            string info   = "";
                            events.ForEach(x => info += "- " + x.name + "\n");
                            builder.AddInlineField(game.name, info);
                        }
                    }
                    else if (root.entities.videogame != null)
                    {
                        string info = "**Games Available:**\n";

                        foreach (var videoGame in root.entities.videogame)
                        {
                            if (info.Length > 900)
                            {
                                info += "For more info check Smash.gg";
                                break;
                            }
                            info += videoGame.name + "\n";
                        }
                        builder.AddField("Games", info);
                    }

                    var image = tournament.images.FirstOrDefault(x => x.type == "profile");
                    if (image != null)
                    {
                        builder.WithThumbnailUrl(image.url);
                    }
                    var banner = tournament.images.FirstOrDefault(x => x.type == "banner");
                    if (banner != null)
                    {
                        builder.ImageUrl = banner.url;
                    }
                }
                else
                {
                    builder = Builders.BaseBuilder("Tournament is private.", "", Color.Red, null, "");
                    builder.AddField("No access", "The tournament you are trying to access is labeled as private in Smash.gg\nWhile we could technically show you the data, we decided not to be unethical and protect the user.");
                }
            }
            else
            {
                builder = Builders.BaseBuilder("Tournament was not found.", "", Color.Red, null, "");
            }
            await ReplyAsync("", embed : builder.Build());
        }
示例#25
0
        protected override async Task Run(SocketMessage sm, string msg)
        {
            EmbedBuilder eb = new Discord.EmbedBuilder
            {
                Title       = title,
                Description = body
            };
            var message = await Bot.Instance.Send(Config.Profile.SuggestionChannel, embed : eb.Build());

            await message.AddReactionAsync(yes);

            await message.AddReactionAsync(no);
        }
示例#26
0
        public async Task GetCharacter([Remainder][Summary("The name of the chracter")] string name)
        {
            var character = RequestHandler.GetCharacterName(name);

            if (character == null)
            {
                await ReplyAsync("", embed : Builders.ErrorBuilder("Character not found"));
            }
            var moves = RequestHandler.GetMoves(name);

            Discord.EmbedBuilder builder = Builders.BaseBuilder("", "", Color.DarkTeal,
                                                                new EmbedAuthorBuilder().WithName("KuroganeHammer Result:").WithUrl("http://kuroganehammer.com"),
                                                                character.ThumbnailURL);
            //builder.WithImageUrl(character.MainImageURL);
            builder.WithUrl(character.FullURL);
            string info = "";

            info += "**Name: **" + character.Name;
            if (!string.IsNullOrEmpty(character.Description))
            {
                info += "**Description: **" + character.Description;
            }
            if (!string.IsNullOrEmpty(character.Style))
            {
                info += "**Style: **" + character.Style;
            }
            builder.AddField(new EmbedFieldBuilder().WithName("Information").WithValue(info));
            var movement = RequestHandler.GetMovement(name);
            var half     = movement.Attributes.Count / 2;
            var info1    = "";
            var info2    = "";

            for (int i = 0; i < movement.Attributes.Count / 2; i++)
            {
                info1 += $"**{movement.Attributes[i].Name}**: {movement.Attributes[i].Value}\n";
                info2 += $"**{movement.Attributes[i + half].Name}**: {movement.Attributes[i + half].Value}\n";
            }
            builder.AddInlineField("Movement", info1);
            builder.AddInlineField("Movement", info2);
            string movesinfo    = "";
            string specials     = "";
            int    specialcount = 0;
            string aerials      = "";
            string smashes      = "";
            string grabs        = "";
            string tilts        = "";

            moves.ForEach(x =>
            {
                if (x.MoveType == "ground")
                {
                    if (x.Name.Contains("smash"))
                    {
                        smashes += x.Name + "\n";
                    }
                    else if (x.Name.Contains("tilt"))
                    {
                        tilts += x.Name + "\n";
                    }
                    else if (x.Name.ToLower().Contains("grab"))
                    {
                        grabs += x.Name + "\n";
                    }
                    else
                    {
                        movesinfo += x.Name + "\n";
                    }
                }

                if (x.MoveType == "special")
                {
                    specials += x.Name + "\n";
                    specialcount++;
                }
                if (x.MoveType == "aerial")
                {
                    aerials += x.Name + "\n";
                }
            });
            builder.AddInlineField("Ground Moves", movesinfo);
            builder.AddInlineField("Smashes", smashes);
            builder.AddInlineField("Specials", specials);
            builder.AddInlineField("Aerials", aerials);
            builder.AddInlineField("Tilts", tilts);
            builder.AddInlineField("Grabs", tilts);
            await ReplyAsync("", embed : builder.Build());
        }
示例#27
0
        public async Task GetMove(string charactername, [Remainder] string moveName)
        {
            Discord.EmbedBuilder builder = null;
            var character = RequestHandler.GetCharacterName(charactername);

            if (character == null)
            {
                await ReplyAsync("", embed : Builders.ErrorBuilder("Character not found"));
            }
            var  moves = RequestHandler.GetMoves(charactername);
            Move move  = null;

            move = moves.FirstOrDefault(x => x.Name.ToLower().Equals(moveName.ToLower()));
            if (move == null)
            {
                move = moves.FirstOrDefault(x => x.Name.ToLower().Contains(moveName.ToLower()));
            }
            if (move != null)
            {
                builder = Builders.BaseBuilder("", "", Color.DarkBlue,
                                               new EmbedAuthorBuilder().WithName(character.Name + " | " + move.Name)
                                               .WithUrl("http://kuroganehammer.com/smash4/" + move.Owner), character.ThumbnailURL);
                string statistics = "";
                //builder.WithImageUrl("https://zippy.gfycat.com/EuphoricCookedHornshark.webm"); //TODO Add later when gifs are supported but holy shit it works.
                if (!string.IsNullOrEmpty(move.MoveType))
                {
                    statistics += "**Move Type:** " + move.MoveType + "\n";
                }
                if (!string.IsNullOrEmpty(move.BaseDamage))
                {
                    statistics += "**Base Damage:** " + move.BaseDamage + "%\n";
                }
                if (!string.IsNullOrEmpty(move.BaseKockbackSetKnockback))
                {
                    statistics += "**Base/Set Knockback: **" + move.BaseKockbackSetKnockback + "\n";
                }
                if (!string.IsNullOrEmpty(move.LandingLag))
                {
                    statistics += "**Landinglag: **" + move.LandingLag + " frames\n";
                }
                if (!string.IsNullOrEmpty(move.HitboxActive))
                {
                    statistics += "**Hitbox Active: **Frames " + move.HitboxActive + "\n";
                }
                if (!string.IsNullOrEmpty(move.KnockbackGrowth))
                {
                    statistics += "**Knockback Growth: **" + move.HitboxActive + "\n";
                }
                if (!string.IsNullOrEmpty(move.Angle))
                {
                    statistics += "**Angle: **" + move.Angle.Replace("361", "Sakuari Angle/361") + "\n";
                }
                if (!string.IsNullOrEmpty(move.AutoCancel))
                {
                    statistics += "**Auto-Cancel: **Frame " + move.AutoCancel.Replace("&gt;", ">") + "\n";
                }
                if (!string.IsNullOrEmpty(move.FirstActionableFrame))
                {
                    statistics += "**First Actionable Frame: **" + move.FirstActionableFrame + "\n";
                }
                builder.AddInlineField("Statistics",
                                       statistics);
                if (move.Angle.Equals("361"))
                {
                    builder.AddInlineField("Sakurai Angle",
                                           "\"The Sakurai angle (sometimes displayed as * in moveset lists) is a special knockback behavior that many attacks use. While it reads in the game data as an angle of 361 degrees, the actual resulting angle is dependent on whether the victim is on the ground or in the air, as well as the strength of the knockback.\"\nSource: https://www.ssbwiki.com/Sakurai_angle");
                }

                builder.AddField("Info",
                                 "If you don't understand the values please visit http://kuroganehammer.com/Glossary");
                await ReplyAsync("", embed : builder.Build());
            }
            else
            {
                await ReplyAsync("", embed : Builders.ErrorBuilder("Move was not found"));
            }
        }
示例#28
0
        public async Task GetResult([Remainder] string name)
        {
            var message = await ReplyAsync("Gathering Data... This may take a while for bigger tournaments");

            var embed = CachedEmbedContainer.GetEmbedByArgs("smashgg result " + name.ToLower());

            if (embed != null)
            {
                await message.DeleteAsync();
                await ReplyAsync("", embed : embed);

                return;
            }
            Discord.EmbedBuilder builder = null;
            var tournament = RequestHandler.GetTournamentRoot(name);

            if (tournament.entities == null)
            {
                builder = Builders.BaseBuilder("Tournament not found", "", Color.Red, null, "");
                await ReplyAsync("", embed : builder.Build());

                await message.DeleteAsync();

                return;
            }
            var    bracketPhases = tournament.entities.phase.Where(x => x.groupCount == 1).ToList();
            var    icon          = tournament.entities.tournament.images.FirstOrDefault(x => x.type == "profile");
            string url           = "";

            if (icon != null)
            {
                url = icon.url;
            }
            builder = Builders.BaseBuilder(tournament.entities.tournament.name, "", Color.DarkOrange, null, url);
            foreach (var bracketPhase in bracketPhases)
            {
                var phaseId       = bracketPhase.id;
                var selectedEvent = tournament.entities.Event.FirstOrDefault(x => x.id == bracketPhase.eventId);
                var group         = tournament.entities.groups.FirstOrDefault(x => x.phaseId == phaseId);
                var result        = RequestHandler.GetResult(group.id);
                var players       = result.Entities.Player;
                if (players != null && result.Entities.Seeds != null)
                {
                    var seedlist    = result.Entities.Seeds.Where(x => x.Placement != null).ToList();
                    var seeds       = seedlist.OrderBy(x => x.Placement).ToList(); //Results sorted by ranking
                    int playerCount = 10;
                    if (seeds.Count < playerCount)
                    {
                        playerCount = seeds.Count;
                    }
                    string placementInfo = "";
                    for (int i = 0; i < playerCount; i++)
                    {
                        var player = players.Where(x => Convert.ToInt64(x.EntrantId) == seeds[i].EntrantId).ToList();
                        if (player.Count == 2)
                        {
                            var player1 = "";
                            var player2 = "";
                            if (!string.IsNullOrEmpty(player[0].Prefix))
                            {
                                player1 = $"**{player[0].Prefix}** {player[0].GamerTag}";
                            }
                            else
                            {
                                player1 = $"{player[0].GamerTag}";
                            }
                            if (!string.IsNullOrEmpty(player[1].Prefix))
                            {
                                player2 = $"**{player[1].Prefix}** {player[1].GamerTag}";
                            }
                            else
                            {
                                player2 = $"{player[1].GamerTag}";
                            }

                            placementInfo +=
                                $"{seeds[0].Placement}: {player1} | {player2}\n";
                        }
                        else
                        {
                            var player1 = "";
                            if (!string.IsNullOrEmpty(player[0].Prefix))
                            {
                                player1 = $"**{player[0].Prefix}** {player[0].GamerTag}";
                            }
                            else
                            {
                                player1 = $"{player[0].GamerTag}";
                            }
                            if (player[0] != null)
                            {
                                placementInfo += $"{seeds[i].Placement}: {player1}\n";
                            }
                        }
                    }
                    if (!string.IsNullOrEmpty(placementInfo))
                    {
                        builder.AddInlineField($"{selectedEvent.name} Results", placementInfo);
                    }
                }
            }
            var tournamentDate = new DateTime(1970, 1, 1, 0, 0, 0);

            tournamentDate = tournamentDate.AddSeconds(tournament.entities.tournament.endAt);
            TimeSpan duration = DateTime.Now - tournamentDate;

            if ((duration.Days < 7 || duration.Days < 0) && Context.Guild != null)
            {
                var spoiled = Builders.BaseBuilder("Spoiler preventer!", "", Color.Red, null, "");
                spoiled.AddField("Spoiler prevented!",
                                 "To prevent spoiling tournament results for people, we only allow tournaments older than a week to be shown in servers.\nThe embed has been DMed to you ;)");
                await ReplyAsync("", embed : spoiled.Build());

                await Context.Message.Author.GetOrCreateDMChannelAsync().Result
                .SendMessageAsync("", embed: builder.Build());
            }
            else
            {
                var embedBuild = builder.Build();
                await ReplyAsync("", embed : embedBuild);

                CachedEmbedContainer.AddEmbed(embedBuild, "smashgg result " + name.ToLower(), TimeSpan.FromDays(1));
            }
            await message.DeleteAsync();
        }
示例#29
0
        public async Task PlayerPerformance(string playerName, [Remainder] string tournamentName)
        {
            var message = await ReplyAsync("Getting data...");

            var tournament = RequestHandler.GetTournamentRoot(tournamentName);

            if (tournament.entities == null)
            {
                var embed = Builders.BaseBuilder("Tournament not found", "", Color.Red, null, "");
                await ReplyAsync("", embed : embed.Build());
            }
            var bracketPhases = tournament.entities.phase.Where(x => x.groupCount == 1).ToList();

            Discord.EmbedBuilder builder = Builders.BaseBuilder(playerName + " Results For " + tournament.entities.tournament.name, "", Color.Red, null, "");
            bool   playerFound           = false;
            double wins   = 0;
            double losses = 0;

            foreach (var bracketPhase in bracketPhases)
            {
                var phaseId = bracketPhase.id;
                var group   = tournament.entities.groups.FirstOrDefault(x => x.phaseId == phaseId);
                var result  = RequestHandler.GetResultSets(group.id);
                var players = result.Entities.Player;
                var player  = players.Where(x => x.GamerTag.ToLower().Trim().Contains(playerName.ToLower().Trim()))
                              .ToList();
                if (player.Count == 1) //player is found, lets go
                {
                    playerFound = true;
                    builder.WithTitle($"{player[0].GamerTag} Results at {tournament.entities.tournament.name}");
                    var sets = result.Entities.Sets.Where(x =>
                                                          x.Entrant1Id == Convert.ToInt64(player[0].EntrantId) ||
                                                          x.Entrant2Id == Convert.ToInt64(player[0].EntrantId)).ToList();
                    string setinfo = "";
                    sets = sets.OrderBy(x => x.CompletedAt).ToList();
                    var characters = new List <string>()
                    {
                        "Bowser",
                        "Captain Falcon",
                        "Donkey Kong",
                        "Dr. Mario",
                        "Falco",
                        "Fox",
                        "Ganondorf",
                        "Ice Climbers",
                        "Jigglypuff",
                        "Kirby",
                        "Link",
                        "Luigi",
                        "Mario",
                        "Marth",
                        "Mewtwo",
                        "Mr. Game And Watch",
                        "Ness",
                        "Peach",
                        "Pichu",
                        "Pikachu",
                        "Roy",
                        "Samus",
                        "Sheik",
                        "Yoshi",
                        "Young Link",
                        "Zelda"
                    };
                    Event  prevEvent = null;
                    string eventInfo = "";
                    foreach (var set in sets)
                    {
                        var setEvent = tournament.entities.Event.FirstOrDefault(x => x.id == set.EventId);
                        if (prevEvent == null)
                        {
                            prevEvent = setEvent;
                        }
                        if (prevEvent.id != setEvent.id)
                        {
                            builder.AddInlineField(prevEvent.name, eventInfo);
                            prevEvent = setEvent;
                            eventInfo = "";
                        }
                        int    playerPlace = 1;
                        Player player2     = null;
                        if (Convert.ToInt64(player[0].EntrantId) == set.Entrant1Id)
                        {
                            player2 = players.FirstOrDefault(x => set.Entrant2Id == Convert.ToInt64(x.EntrantId));
                        }
                        else
                        {
                            player2     = players.FirstOrDefault(x => set.Entrant1Id == Convert.ToInt64(x.EntrantId));
                            playerPlace = 2;
                        }
                        if (player2 != null)
                        {
                            string gameinfo = "";
                            foreach (var game in set.Games)
                            {
                                gameinfo +=
                                    $"{characters[(int) game.Entrant1P1CharacterId - 1]} {game.Entrant1P1Stocks} - {game.Entrant2P1Stocks} {characters[(int) game.Entrant2P1CharacterId - 1]}\n";
                            }
                            if (gameinfo == "")
                            {
                                gameinfo = "Nothing available\n";
                            }
                            if (playerPlace == 1 && set.Entrant1Score != null && set.Entrant2Score != null)
                            {
                                eventInfo +=
                                    $"**{set.FullRoundText}:**\n{player[0].GamerTag} - {player2.GamerTag}: {set.Entrant1Score} - {set.Entrant2Score}\n" +
                                    gameinfo + "\n";
                                if (set.Entrant1Score != null)
                                {
                                    wins += (double)set.Entrant1Score;
                                }
                                if (set.Entrant2Score != null)
                                {
                                    losses += (double)set.Entrant2Score;
                                }
                            }
                            else if (set.Entrant1Score != null && set.Entrant2Score != null)
                            {
                                eventInfo +=
                                    $"**{set.FullRoundText}:**\n{player2.GamerTag} - {player[0].GamerTag}: {set.Entrant1Score} - {set.Entrant2Score}\n" +
                                    $"{gameinfo}\n";
                                if (set.Entrant2Score != null)
                                {
                                    wins += (double)set.Entrant1Score;
                                }
                                if (set.Entrant1Score != null)
                                {
                                    losses += (double)set.Entrant2Score;
                                }
                            }
                        }
                    }
                    //builder.AddField("Results", ssetinfo);
                    var imageurl = player[0].Images.FirstOrDefault(x => x.Type == "profile");
                    if (imageurl != null)
                    {
                        builder.WithThumbnailUrl(imageurl.Url);
                    }
                    if (wins != 0 && losses != 0)
                    {
                        eventInfo += $"\n" +
                                     $"***Overall performance***\n" +
                                     $"**Games Won: **{wins}\n" +
                                     $"**Games Lost: **{losses}\n" +
                                     $"**Winrate: **{Math.Round((wins / (wins + losses) * 100), 2)}%";
                    }

                    builder.AddInlineField(prevEvent.name, eventInfo);
                }
            }
            if (!playerFound)
            {
                builder = Builders.BaseBuilder("Player not found", "", Color.Red, null, "");
            }
            await ReplyAsync("", embed : builder.Build());

            await message.DeleteAsync();
        }