예제 #1
0
        private async Task SendMessages(Trade trade, VetMember sender, string message)
        {
            var senderIsOwner = trade.VetMemberId == sender.Id;

            var messageTargets =
                senderIsOwner ? DbContext.TradeMessages.AsQueryable().Where(c => c.TradeId == trade.Id).Select(c => c.VetMember).Distinct().ToArray()
                            : new[] { trade.VetMember };

            var dmMessage = $@"
メッセージ元:{trade.Title}
URL:{StaticSettings.SiteBaseUrl}Trades/Details?id={trade.Id}
差出人:{sender.Name}
{message}";

            Discord.EmbedBuilder builder = new Discord.EmbedBuilder();
            builder.WithTitle(trade.Title)
            .WithAuthor(sender.Name, sender.GetAvaterIconUrl(), sender.GetMemberPageUrl(StaticSettings.SiteBaseUrl))
            .WithUrl($"{StaticSettings.SiteBaseUrl}Trades/Details?id={trade.Id}")
            // .AddField("アクション", "メッセージがあります")
            .AddField("メッセージ内容", message);



            await CoreService.SendDirectMessage(messageTargets, string.Empty, builder.Build());
        }
예제 #2
0
        private async Task SalesNotification(UserContext userContext, Vender vender, VenderSale venderSale)
        {
            var builder = new Discord.EmbedBuilder();

            builder
            .WithTitle($"{vender.Title} 【購入】")
            .WithUrl($"{StaticSettings.SiteBaseUrl}Venders/Details?id={vender.Id}")
            .WithAuthor(
                userContext.CurrentUser.Name,
                userContext.CurrentUser.GetAvaterIconUrl(),
                userContext.CurrentUser.GetMemberPageUrl(StaticSettings.SiteBaseUrl)
                )
            .AddField("金額", $"{venderSale.Amount}{StaticSettings.CurrenryUnit}", false);

            if (!string.IsNullOrEmpty(venderSale.Message))
            {
                builder
                .AddField("メッセージ", venderSale.Message, false);
            }



            var messageTargets = new[] { vender.VetMember };
            await CoreService.SendDirectMessage(messageTargets, string.Empty, builder.Build());
        }
예제 #3
0
        private async Task SendMessages(Contract contract, VetMember sender, string message)
        {
            var stakeHolders = await GetStakeHolders(contract.Id);

            var trade = DbContext.Contracts.AsQueryable().Where(c => c.Id == contract.Id).Select(c => c.Trade).First();


            //            var dmMessage = $@"
            //メッセージ元:{trade.Title}
            //URL:https://vetcoin.azurewebsites.net/Trades/Contracts?contractId={contract.Id}
            //差出人:{sender.Name}
            //{message}";
            Discord.EmbedBuilder builder = new Discord.EmbedBuilder();
            builder.WithTitle(trade.Title)
            .WithAuthor(sender.Name, sender.GetAvaterIconUrl(), sender.GetMemberPageUrl(StaticSettings.SiteBaseUrl))
            .WithUrl($"https://vetcoin.azurewebsites.net/Trades/Contracts?contractId={contract.Id}")
            // .AddField("アクション", "メッセージがあります")
            .AddField("メッセージ内容", message);


            var messageTargets = stakeHolders.Where(c => c.Id != sender.Id).ToArray();


//#if DEBUG
//            messageTargets = new[] { sender };
//#endif

            await CoreService.SendDirectMessage(messageTargets, string.Empty, builder.Build());
        }
예제 #4
0
        public async Task GetUInfoAsync(SocketGuildUser user = null)
        {
            // Makes a default value for the user the bot gets info for if the command was given no user.
            var userGet = user ?? Context.User as SocketGuildUser;

            // Creates new EmbedBuilder.
            var userInfo = new Discord.EmbedBuilder()
            {
                Title        = $"Info about **{userGet.Username}**",
                ThumbnailUrl = userGet.GetAvatarUrl() ?? userGet.GetDefaultAvatarUrl(),
                Color        = Discord.Color.Green
            };

            // Adds fields containing various types of information about the user.
            userInfo.AddField("Username & Discriminator", userGet.Username + "#" + userGet.Discriminator, true);
            userInfo.AddField("Nickname", userGet.Nickname ?? "None", true);
            userInfo.AddField("Account Created At", userGet.CreatedAt.DateTime.ToString(), true);
            userInfo.AddField("Joined Server At", userGet.JoinedAt.Value.DateTime.ToString(), true);
            if (userGet.Status != Discord.UserStatus.DoNotDisturb)
            {
                userInfo.AddField("Status", userGet.Status.ToString(), true);
            }
            else
            {
                userInfo.AddField("Status", "Do Not Disturb", true);
            }
            userInfo.AddField("Bot", userGet.IsBot ? "Yes" : "No", true);

            // Posts the embed to the channel.
            await ReplyAsync("", false, userInfo.Build());
        }
예제 #5
0
 private async Task ErrorAsync(string message)
 {
     Discord.EmbedBuilder embed = new Discord.EmbedBuilder();
     embed.Title       = "whois Command Error";
     embed.Description = "An error has occurred trying to execute your command.";
     embed.AddField("Error Message", message);
     await ReplyAsync(null, false, embed.Build());
 }
예제 #6
0
 public async Task AboutAsync()
 {
     Discord.EmbedBuilder embed = new Discord.EmbedBuilder();
     embed.Title       = "Master Spriggans";
     embed.Description = "The provider of callouts to all those in need.";
     embed.AddField("About Me", "I'm a discord bot. I'm not ready for use yet, but I will be soon.");
     embed.ThumbnailUrl = _renaThumbnail;
     await ReplyAsync(null, false, embed.Build());
 }
예제 #7
0
        public async Task SendEmbedAsync(string v1, Embed v3)
        {
            var builder = new Discord.EmbedBuilder();

            foreach (var value in v3)
            {
                builder.AddInlineField(value.Key, value.Value);
            }
            await DiscordSocketMessage.Channel.SendMessageAsync(v1, false, builder.Build());
        }
예제 #8
0
        private void SendRaport()
        {
            var embed = new Discord.EmbedBuilder();

            embed.WithTitle($"Results of the battle in __**{this.attackedSystem}**__");
            embed.WithColor(new Discord.Color(255, 0, 0));
            embed.WithCurrentTimestamp();
            embed.AddField("Time of battle", $"From: {this.encounterStart.ToString("T")}\nTo: {this.lastNotification.ToString("T")}\nTotal: {this.GetEncounterTime().ToString(@"hh\:mm\:ss")}", false);
            embed.AddField("Statistics", $"Total number of characters attacking: {this.attackingPlayers.Count}\nTotal number of teams attacking: {this.attackingTeams.Count}\nNumber of messages: {this.totalMessageAmount}", false);
            embed.AddField("Players attacking", string.Join("\n", this.attackingPlayers.ToArray()), false);
            embed.AddField("Teams attacking", string.Join("\n", this.attackingTeams.ToArray()), false);
            _ = this.discordApi.EmbedObjectAsync(this.channelID, embed.Build(), true);
        }
예제 #9
0
        private async Task SendConfirmNotificationAsync(ExteralApplication app, VetMember user, ExteralApplicationPayment eap)
        {
            Discord.EmbedBuilder builder = new Discord.EmbedBuilder();

            builder.WithTitle($"{app.Name}:購入確認");
            builder.WithUrl(app.CallbackUrl + $"?id={eap.Id}");
            builder.WithAuthor(app.VetMember.Name, app.VetMember.GetAvaterIconUrl(), app.VetMember.GetMemberPageUrl(StaticSettings.SiteBaseUrl));
            builder.AddField("金額", eap.Amount);
            builder.WithDescription(eap.Description);
            builder.WithFooter("よろしければ、タイトルをクリックして購入処理をつづけてください");

            await CoreService.SendDirectMessage(new[] { user }, string.Empty, builder.Build());
        }
예제 #10
0
        private Task Result(string arg)
        {
            int haramLevel = _random.Next(101);
            int barLevel   = (int)Math.Round((double)haramLevel / 5);

            var embed = new Discord.EmbedBuilder()
                        .WithTitle("Haram Meter")
                        .WithDescription($"{arg} is {haramLevel}% haram.\n`Halal` {new String('-', barLevel)}🔵{new String('-', 20 - barLevel)} `Haram`");

            ReplyAsync("", false, embed.Build());

            return(Task.CompletedTask);
        }
예제 #11
0
        private async Task DeliveryMessage(UserContext userContext, Vender vender, VenderSale venderSale)
        {
            var builder = new Discord.EmbedBuilder();

            builder
            .WithTitle($"{vender.Title} 【購入】")
            .WithUrl($"{StaticSettings.SiteBaseUrl}Venders/Details?id={vender.Id}")
            .WithAuthor(
                userContext.CurrentUser.Name,
                userContext.CurrentUser.GetAvaterIconUrl(),
                userContext.CurrentUser.GetMemberPageUrl(StaticSettings.SiteBaseUrl)
                )
            .AddField("金額", $"{venderSale.Amount}{StaticSettings.CurrenryUnit}", false);
            //.AddField("メッセージ", venderSale.Message, false);


            if (!string.IsNullOrEmpty(venderSale.Message))
            {
                builder
                .AddField("メッセージ", venderSale.Message, false);
            }

            //if (!string.IsNullOrEmpty(vender.DeliveryMessage))
            //{
            //    builder.WithDescription(vender.DeliveryMessage);
            //}
            //else
            //{
            //    builder.WithDescription("[配信メッセージが未設定です]");
            //}
            string message = null;

            if (!string.IsNullOrEmpty(vender.DeliveryMessage))
            {
                message = $@"販売者からのメッセージです
----------------------------
{vender.DeliveryMessage}";
            }
            else
            {
            }


            var messageTargets = new[] { userContext.CurrentUser };
            await CoreService.SendDirectMessage(messageTargets, message, builder.Build());


            await Task.Yield();
        }
예제 #12
0
        private void userinfo(ServerMessage e, string m)
        {
            var user = Funcs.GetUserByMentionOrName(e.Server.Users, m);

            if (user != null)
            {
                var eb = new Discord.EmbedBuilder().WithAuthor("The Overbork", server.DC.CurrentUser.GetAvatarUrl()).WithCurrentTimestamp();
                eb.WithTitle(user.Nickname + "(" + user.Username + ")").WithDescription(user.Mention);
                eb.AddInlineField("Status", user.Status).AddInlineField("Joined", user.JoinedAt).AddInlineField("Hierarchy Position", user.Hierarchy).AddInlineField("Registered", user.CreatedAt);
                var embed = eb.Build();
                server.safeSendEmbed(e.Channel, embed);
            }
            else
            {
                server.safeSendMessage(e.Channel, "Could not find user: " + m);
            }
        }
예제 #13
0
        private async Task EmbedCharacterAsync(CharacterResponseModel xivApiResponse)
        {
            if (xivApiResponse.Error.HasValue)
            {
                await ErrorAsync(xivApiResponse.Message);

                return;
            }

            CharacterModel character = xivApiResponse.Character;


            Discord.EmbedBuilder embed = new Discord.EmbedBuilder();
            embed.Title        = character.Name;
            embed.ImageUrl     = character.Portrait;
            embed.ThumbnailUrl = character.Avatar;
            await ReplyAsync(null, false, embed.Build());
        }
예제 #14
0
        public Discord.Embed getHelpMessageEmbed()
        {
            var eb = new Discord.EmbedBuilder().WithAuthor("The Overbork", server.DC.CurrentUser.GetAvatarUrl()).WithCurrentTimestamp();

            eb.WithTitle(name).WithDescription(helpmessage.getDescription()).AddInlineField("Format", helpmessage.getFormat()).AddInlineField("Permission Required", priv == PrivilegeLevel.Everyone ? "None" : "Bot Admin");
            var args = helpmessage.getArguments().SelectMany(x => x + "\n").ToArray();

            eb.AddField("Arguments", args.Length == 0 ? "None" : new String(args));

            /*            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());*/
            return(eb.Build());
        }
예제 #15
0
        //private async Task<VetMember[]> GetStakeHolders(int id)
        //{
        //    var contractMember = DbContext.Contracts.AsQueryable().Where(c => c.Id == id).Select(c => c.VetMember);
        //    var tradeMember = DbContext.Contracts.AsQueryable().Where(c => c.Id == id).Select(c => c.Trade.VetMember);
        //    var messageMembers = DbContext.TradeMessages.AsQueryable().Where(c => c.TradeId == id).Select(c => c.VetMember);

        //    var stakeHolders = contractMember.Concat(tradeMember).Concat(messageMembers).Distinct();


        //    return await stakeHolders.ToArrayAsync();
        //}

        private async Task SendMessages(Contract contract, VetMember sender, VetMember reciver, VetMember postUser)
        {
            //var stakeHolders = await GetStakeHolders(contract.Id);
            var trade = DbContext.Contracts.AsQueryable().Where(c => c.Id == contract.Id).Select(c => c.Trade).First();

            Discord.EmbedBuilder builder = new Discord.EmbedBuilder();
            builder.WithTitle(trade.Title)
            .WithAuthor(postUser.Name, postUser.GetAvaterIconUrl(), postUser.GetMemberPageUrl(StaticSettings.SiteBaseUrl))
            .WithUrl($"https://vetcoin.azurewebsites.net/Trades/Contracts?contractId={contract.Id}")
            .AddField("アクション", "作業完了通知")
            .AddField("メッセージ内容", @"作業完了したようです。
納品物などを確認して契約完了ボタンをおしてください");



            var messageTargets = new[] { sender };

            await CoreService.SendDirectMessage(messageTargets, string.Empty, builder.Build());
        }
예제 #16
0
        private async Task SendMessages(Vender vender, VetMember sender, string message)
        {
            var senderIsOwner = vender.VetMemberId == sender.Id;

            var messageTargets =
                senderIsOwner ? DbContext.VenderMessages
                .AsQueryable()
                .Where(c => c.VenderId == vender.Id)
                .Select(c => c.VetMember).Distinct().ToArray()
                            : new[] { vender.VetMember };


            Discord.EmbedBuilder builder = new Discord.EmbedBuilder();
            builder.WithTitle($"{ vender.Title} 【メッセージ】")
            .WithAuthor(sender.Name, sender.GetAvaterIconUrl(), sender.GetMemberPageUrl(StaticSettings.SiteBaseUrl))
            .WithUrl($"{StaticSettings.SiteBaseUrl}Venders/Details?id={vender.Id}")
            .AddField("内容", message);

            await CoreService.SendDirectMessage(messageTargets, string.Empty, builder.Build());
        }
예제 #17
0
        protected override async Task Run(SocketMessage sm, string msg)
        {
            if (!Server.GetServerFromID(_id, out Server server))
            {
                await Bot.Instance.Send(sm.Channel.Id, "Server not found. Either the server does not exist, or its server page is disabled.");

                return;
            }

            Discord.EmbedBuilder eb = new Discord.EmbedBuilder()
                                      .WithTitle(server.Name)
                                      .AddField("Type", server.Type, true)
                                      .AddField("Location", server.Location, true);

            if (_desc != null)
            {
                eb.Description = _desc;
            }

            await Bot.Instance.Send(Config.Profile.AdChannel, embed : eb.Build());

            await Bot.Instance.Send(sm.Channel.Id, "Message sent!");
        }
예제 #18
0
        private async Task Notification(VetMember from, VetMember to, long amount, string message, long totalAmount)
        {
            var builder = new Discord.EmbedBuilder();

            builder
            .WithTitle($"{from.Name} から{amount}{StaticSettings.CurrenryUnit} 送金されました")
            .WithAuthor(
                from.Name,
                from.GetAvaterIconUrl(),
                from.GetMemberPageUrl(StaticSettings.SiteBaseUrl)
                )
            .AddField("金額", $"{amount}{StaticSettings.CurrenryUnit}", false)
            .AddField("残高", $"{totalAmount}{StaticSettings.CurrenryUnit}", false);

            if (!string.IsNullOrEmpty(message))
            {
                builder
                .AddField("メッセージ", message, false);
            }

            var messageTargets = new[] { to };
            await CoreService.SendDirectMessage(messageTargets, string.Empty, builder.Build());
        }
예제 #19
0
        private async void OnCommandRecieved(BotWideCommandArguments args)
        {
            BotChannel bChan = await GetBotChannel(args);

            if (bChan == null)
            {
                return;
            }
            await DBVerify(bChan);

            InsultSettings settings = await Settings <InsultSettings>(bChan, PluginName);

            BotWideResponseArguments response = new BotWideResponseArguments(args);

            if (args.command.ToLower() == "insult" && settings._active)
            {
                string pickedLine = dbStrings.GetRandomLine(bChan, "INSULT");
                response.message      = pickedLine;
                response.parseMessage = true;
                response.victim       = args.user;
                Respond(bChan, response);
            }
            if (!args.isModerator && !args.isBroadcaster && !args.canManageMessages)
            {
                // No access below
                return;
            }
            if (args.command.ToLower() == "insults")
            {
                // Blank insults response here
                if (args.arguments.Count == 0)
                {
                    if (args.source == MESSAGESOURCE.DISCORD)
                    {
                        Discord.EmbedFooterBuilder footer = new Discord.EmbedFooterBuilder {
                            Text = $"The plugin is currently {(settings._active ? "active" : "inactive")} here."
                        };

                        Discord.EmbedBuilder embedded = new Discord.EmbedBuilder {
                            Title       = "Plugin: Insults ",
                            Description = HelpText(settings),
                            Color       = Discord.Color.DarkOrange,
                            Footer      = footer
                        };

                        await SayEmbedOnDiscord(args.channelID, embedded.Build());

                        return;
                    }
                    if (args.source == MESSAGESOURCE.TWITCH)
                    {
                        response.message = $"The plugin is currently {(settings._active ? "active" : "inactive")} here.";
                        Respond(bChan, response);
                        return;
                    }
                }
                // resolve subcommands
                switch (args.arguments[0])
                {
                case "off":
                    settings._active = false;
                    SaveBaseSettings(bChan, PluginName, settings);
                    response.message = $"Insults is inactive.";
                    Respond(bChan, response);
                    break;

                case "on":
                    settings._active = true;
                    SaveBaseSettings(bChan, PluginName, settings);
                    response.message = $"Insults is active.";
                    Respond(bChan, response);
                    break;

                case "add":
                    if (args.source == MESSAGESOURCE.TWITCH)
                    {
                        return;
                    }
                    if (args.arguments.Count <= 1)
                    {
                        response.message = "You need to have line after the add. Use [VICTIM] as replacement of the user's name.";
                        Respond(bChan, response);
                        return;
                    }
                    args.arguments.RemoveAt(0);
                    string line = string.Empty;
                    foreach (string part in args.arguments)
                    {
                        line += " " + part;
                    }
                    line = line.Trim();
                    dbStrings.SaveNewLine(bChan, "INSULT", line);
                    response.message = $"Added one more line for the Insult plugin.";
                    Respond(bChan, response);
                    break;

                case "use":
                    if (args.source == MESSAGESOURCE.TWITCH)
                    {
                        return;
                    }
                    if (args.arguments.Count <= 1)
                    {
                        response.message = "You need to give a valid ID. Check the List command to see ID for the lines in the database.";
                        Respond(bChan, response);
                        return;
                    }
                    int id = -1;
                    int.TryParse(args.arguments[1], out id);
                    if (id < 1)
                    {
                        response.message = "You need to give a valid ID. That ID couldn't be used.";
                        Respond(bChan, response);
                        return;
                    }
                    DBString entry = await dbStrings.GetStringByID(bChan, id);

                    if (entry == null)
                    {
                        response.message = "That ID didn't match anything I could find. Doublecheck it.";
                        Respond(bChan, response);
                        return;
                    }
                    DBString edited = new DBString(entry._id, !entry._inuse, entry._topic, entry._text);
                    if (dbStrings.SaveEditedLineByID(bChan, edited))
                    {
                        response.message = "Entry updated.";
                    }
                    else
                    {
                        response.message = "Failed to update entry.";
                    }
                    Respond(bChan, response);
                    break;

                case "remove":
                    if (args.arguments.Count <= 1)
                    {
                        response.message = "You need to give a valid ID. Check the List command to see ID for the lines in the database.";
                        Respond(bChan, response);
                        return;
                    }
                    int id2 = -1;
                    int.TryParse(args.arguments[1], out id2);
                    if (id2 < 1)
                    {
                        response.message = "You need to give a valid ID. That ID couldn't be used.";
                        Respond(bChan, response);
                        return;
                    }
                    DBString entry2 = await dbStrings.GetStringByID(bChan, id2);

                    if (entry2 == null)
                    {
                        response.message = "That ID didn't match anything I could find. Doublecheck it.";
                        Respond(bChan, response);
                        return;
                    }
                    if (entry2._inuse)
                    {
                        response.message = $"Only entries that is not in use can be deleted. Use \"{CMC}insults use <ID>\" to toggle the inuse flag on entries.";
                        Respond(bChan, response);
                        return;
                    }
                    // Remove the actual entry
                    if (dbStrings.DeleteEntry(bChan, id2))
                    {
                        response.message = $"Entry {id2} deleted.";
                        Respond(bChan, response);
                        return;
                    }
                    response.message = $"Failed to delete line {id2} for some reason.";
                    Respond(bChan, response);
                    break;

                case "list":
                    if (args.source != MESSAGESOURCE.DISCORD)
                    {
                        return;
                    }
                    if (args.arguments.Count == 1)
                    {
                        await ListLinesFromDB(bChan, args.channelID, 0);

                        return;
                    }
                    int page = 0;
                    int.TryParse(args.arguments[1], out page);
                    if (page <= 0)
                    {
                        page = 1;
                    }

                    await ListLinesFromDB(bChan, args.channelID, page - 1);

                    break;
                }
            }
        }
예제 #20
0
        private async void OnCommandRecieved(BotWideCommandArguments args)
        {
            BotChannel bChan = await GetBotChannel(args);

            if (bChan == null)
            {
                return;
            }
            QueueSettings settings = await Settings <QueueSettings>(bChan, PluginName);

            BotWideResponseArguments response = new BotWideResponseArguments(args);

            if (settings._active && args.source == MESSAGESOURCE.TWITCH && (args.command.ToLower() == "addqueue" || args.command.ToLower() == "aq"))
            {
                QueueUp(bChan, args.userDisplayName);
                return;
            }
            if (settings._active && args.source == MESSAGESOURCE.TWITCH && (args.command.ToLower() == "leavequeue" || args.command.ToLower() == "lq"))
            {
                if (QueueLeave(bChan, args.userDisplayName))
                {
                    response.message      = $"{args.userDisplayName} left the queue";
                    response.parseMessage = true;
                    response.victim       = args.user;
                    Respond(bChan, response);
                }
                return;
            }

            if (!args.isModerator && !args.isBroadcaster && !args.canManageMessages)
            {
                // No access below
                return;
            }
            if (args.command.ToLower() == "queue")
            {
                // Blank queue response here
                if (args.arguments.Count == 0)
                {
                    if (args.source == MESSAGESOURCE.DISCORD)
                    {
                        Discord.EmbedFooterBuilder footer = new Discord.EmbedFooterBuilder
                        {
                            Text = $"The plugin is currently {(settings._active ? "active" : "inactive")} here.{(HasActiveQueue(bChan) ? $" {QueuedUserCount(bChan)} in queue." : "")}"
                        };

                        Discord.EmbedBuilder embedded = new Discord.EmbedBuilder
                        {
                            Title       = "Plugin: Queue ",
                            Description = HelpText(settings),
                            Color       = Discord.Color.DarkOrange,
                            Footer      = footer
                        };

                        await SayEmbedOnDiscord(args.channelID, embedded.Build());

                        return;
                    }
                    if (args.source == MESSAGESOURCE.TWITCH)
                    {
                        response.message = $"The plugin is currently {(settings._active ? "active" : "inactive")} here.{(HasActiveQueue(bChan) ? $" {QueuedUserCount(bChan)} in queue." : "")}";
                        Respond(bChan, response);
                        return;
                    }
                }
                // resolve subcommands
                switch (args.arguments[0])
                {
                case "off":
                    settings._active = false;
                    SaveBaseSettings(bChan, PluginName, settings);
                    response.message = $"Queue is inactive.";
                    Respond(bChan, response);
                    break;

                case "on":
                    settings._active = true;
                    SaveBaseSettings(bChan, PluginName, settings);
                    response.message = $"Queue is active.";
                    Respond(bChan, response);
                    break;

                case "next":
                    if (settings._active)
                    {
                        response.message = NextInQueue(bChan);
                        Respond(bChan, response);
                        if (response.source == MESSAGESOURCE.DISCORD && bChan.TwitchChannelName != string.Empty)
                        {
                            Program.TwitchSayMessage(bChan.TwitchChannelName, response.message);
                        }
                    }
                    break;

                case "reset":
                    if (settings._active)
                    {
                        CreateQueue(bChan, settings);
                        response.message = "Queue reset";
                        Respond(bChan, response);
                        if (response.source == MESSAGESOURCE.DISCORD && bChan.TwitchChannelName != string.Empty)
                        {
                            Program.TwitchSayMessage(bChan.TwitchChannelName, response.message);
                        }
                    }
                    break;

                case "start":
                    if (settings._active)
                    {
                        CreateQueue(bChan, settings);
                        response.message = $"Queue started";
                        Respond(bChan, response);
                        if (response.source == MESSAGESOURCE.DISCORD && bChan.TwitchChannelName != string.Empty)
                        {
                            Program.TwitchSayMessage(bChan.TwitchChannelName, response.message);
                        }
                    }
                    break;

                case "stop":
                    if (settings._active)
                    {
                        StopQueue(bChan);
                        response.message = $"Queue stopped.";
                        Respond(bChan, response);
                        if (response.source == MESSAGESOURCE.DISCORD && bChan.TwitchChannelName != string.Empty)
                        {
                            Program.TwitchSayMessage(bChan.TwitchChannelName, response.message);
                        }
                    }
                    break;
                }
            }
        }
예제 #21
0
        private static async Task <Discord.Embed> GetStory(FicLink link, bool alreadyLinked, string forUser)
        {
            try
            {
                Story story;

                if (link.Network == FicNetwork.FFN)
                {
                    story = await FFNCrawler.CrawlStory(link.ID);
                }
                else if (link.Network == FicNetwork.AO3)
                {
                    story = await AO3Crawler.CrawlStory(link.ID);
                }
                else
                {
                    return(null);
                }

                string statusLine = "Published " + story.Published.ToShortDateString();
                if (story.Updated != null)
                {
                    statusLine += ", Updated " + ((DateTime)story.Updated).ToShortDateString();
                }

                statusLine += "  -  " + story.NumReviews + " Reviews, " + story.NumFavorites + " Favorites";

                string numWords = story.NumWords.ToString("N0", CultureInfo.InvariantCulture).Replace(",", "'");


                var numRecs = RecCounter.GetNumRecommendations(story);

                if (forUser != null)
                {
                    numRecs = RecCounter.Recommend(story, forUser);
                }

                var desc = story.Description;

                List <string> descriptionLines = new List <string>();

                while (desc.Length > 100)
                {
                    var lastSpaceRight = desc.LastIndexOf(' ', 100);
                    if (lastSpaceRight == -1)
                    {
                        lastSpaceRight = desc.IndexOf(' ');
                        if (lastSpaceRight == -1)
                        {
                            descriptionLines.Add(desc);
                            break;
                        }
                    }
                    descriptionLines.Add(desc.Substring(0, lastSpaceRight));
                    desc = desc.Substring(lastSpaceRight + 1);
                }

                if (desc.Length > 0)
                {
                    descriptionLines.Add(desc);
                }

                string description = Clean(story.Description);
                var    updated     = story.Updated ?? story.Published;

                var builder = new Discord.EmbedBuilder();
                builder.WithAuthor(story.Author.PenName, url: story.Author.Url);
                builder.Title       = story.Title;
                builder.Url         = story.Url;
                builder.Description = story.Description;

                var book = "";
                if (story.IsComplete || DateTime.Now.Subtract(updated).TotalDays < 14)
                {
                    book = ":green_book:";
                }
                else if (DateTime.Now.Subtract(updated).TotalDays < 180)
                {
                    book = ":orange_book:";
                }
                else
                {
                    book = ":closed_book:";
                }

                var updateString = AgoString(updated) + (story.IsComplete ? " - Complete!" : "");

                builder.AddInlineField(book + " Last Updated", updateString);

                builder.AddInlineField(":book: Length", $"{FormatBigNumber(story.NumWords)} words in {story.NumChapters} chapters");

                return(builder.Build());
            }
            catch (Exception e)
            {
                Console.WriteLine("Error when crawling story " + link.ID + " at " + link.Network);
                Console.WriteLine(e.Message);
                Console.WriteLine(e.StackTrace);
                return(null);
            }
        }
예제 #22
0
        public async Task Price([Remainder, Summary("Item name")] string item)
        {
            try
            {
                item = item.ToLower();
                if (!bItemsCached)
                {
                    using (StreamReader sr = new StreamReader(@"res\osrsitems.txt"))
                    {
                        string itemsJson = await sr.ReadToEndAsync();

                        string        format = itemsJson.Trim(new char[] { '{', '}' });
                        List <string> items  = format.Split(new string[] { "}," }, StringSplitOptions.None).ToList <string>();
                        for (int i = 0; i < items.Count; i++)
                        {
                            items[i] = items[i].Trim().Replace("\"", String.Empty).Replace("{", String.Empty);
                            string[] itemArray = items[i].Split('\n');
                            string   id        = itemArray[0].Trim('\"').Split(':').First();
                            string   name      = itemArray[1].Split(':').Last().Replace(",", String.Empty).Trim();
                            bool     trade     = Boolean.Parse(itemArray[3].Split(':').Last().Replace(",", String.Empty).Trim());

                            RunescapeItem rsItem = new RunescapeItem(id, name, trade);
                            try
                            {
                                if (trade)
                                {
                                    dictItems.Add(rsItem.Name.ToLower(), rsItem);
                                }
                            }
                            catch
                            {
                            }
                        }
                    }
                    bItemsCached = true;
                }

                RunescapeItem OsrsItem = dictItems[item];
                if (!OsrsItem.Trade)
                {
                    await Context.Channel.SendMessageAsync("Item is not tradeable!");

                    return;
                }
                string itemId         = OsrsItem.Id;
                string responseString = await client.GetStringAsync($"http://services.runescape.com/m=itemdb_oldschool/api/catalogue/detail.json?item={itemId}");

                XmlDocument docItem = JsonConvert.DeserializeXmlNode(responseString);
                XmlNode     ndItem  = docItem.DocumentElement;
                string      price   = ndItem.SelectSingleNode("current/price").InnerText;
                string      icon    = ndItem.SelectSingleNode("icon_large").InnerText;
                string      trend   = ndItem.SelectSingleNode("day30/change").InnerText;
                var         embed   = new Discord.EmbedBuilder();
                embed.WithImageUrl(icon);
                await Context.Channel.SendMessageAsync($"{item}: {price} gp", false, embed.Build());

                await Context.Channel.SendMessageAsync($"Trend: {trend}");
            }
            catch (Exception ex)
            {
                await Context.Channel.SendMessageAsync($"Error looking item in GE. Item is either untradeable or spelled wrong.");
            }
        }