コード例 #1
0
        //public static async Task<DiscordMessage> GetFirstMessage(this DiscordClient client, string lobbyName)
        //{
        //    var lobbyChannel = client.GetChannelByName(lobbyName);
        //    if (lobbyChannel == null)
        //    {
        //        Utils.LogError(new Exception($"Unrecognized lobby name '{lobbyName}'."));
        //        return null;
        //    }

        //    var messages = await lobbyChannel.GetMessagesAsync();
        //    if (messages != null)
        //    {
        //        return messages[messages.Count - 1];
        //    }

        //    return null;
        //}

        #region Old Raid Lobby System
        //public static async Task<DiscordMessage> UpdateLobbyStatus(this DiscordClient client, RaidLobby lobby)
        //{
        //    if (lobby == null)
        //    {
        //        Utils.LogError(new Exception($"Failed to get lobby from database."));
        //        return null;
        //    }

        //    var lobbyChannel = await client.GetChannel(lobby.ChannelId);
        //    if (lobbyChannel == null)
        //    {
        //        Utils.LogError(new Exception($"Failed to get raid lobby channel from {lobby.LobbyName} ({lobby.ChannelId})."));
        //        return null;
        //    }

        //    var pinnedMessage = await lobbyChannel.GetMessageAsync(lobby.PinnedRaidMessageId);
        //    if (pinnedMessage == null)
        //    {
        //        Utils.LogError(new Exception($"Failed to get pinned raid lobby message from message id {lobby.PinnedRaidMessageId}."));
        //        return null;
        //    }

        //    return await pinnedMessage.ModifyAsync(new Optional<string>(await CreateLobbyStatus(client, lobby)));
        //}

        //public static async Task<DiscordMessage> SendLobbyStatus(this DiscordClient client, RaidLobby lobby, DiscordEmbed embed, bool pin)
        //{
        //    if (lobby == null)
        //    {
        //        Utils.LogError(new Exception($"Failed to get lobby from database."));
        //        return null;
        //    }

        //    var lobbyChannel = await client.GetChannel(lobby.ChannelId);
        //    if (lobbyChannel == null)
        //    {
        //        Utils.LogError(new Exception($"Failed to get raid lobby channel from {lobby.LobbyName} ({lobby.ChannelId})."));
        //        return null;
        //    }

        //    var message = await lobbyChannel.SendMessageAsync(await CreateLobbyStatus(client, lobby), false, embed);
        //    if (pin) await message.PinAsync();
        //    lobby.PinnedRaidMessageId = message.Id;

        //    return message;
        //}

        //public static async Task<string> RaidLobbyUserStatus(this DiscordClient client, RaidLobby lobby)
        //{
        //    var lobbyUserStatus = "**Raid Lobby User Status:**\r\n";

        //    foreach (var lobbyUser in lobby.UserCheckInList)
        //    {
        //        var user = await client.GetUser(lobbyUser.UserId);
        //        if (user == null)
        //        {
        //            Utils.LogError(new Exception($"Failed to find user {lobbyUser.UserId}"));
        //            return string.Empty;
        //        }

        //        var people = lobbyUser.UserCount;

        //        if (lobbyUser.IsCheckedIn && !lobbyUser.IsOnTheWay)
        //        {
        //            lobbyUserStatus += $"{user.Mention} **checked-in** at {lobbyUser.CheckInTime.ToLongTimeString()} and is ready to start.\r\n";
        //        }
        //        else
        //        {
        //            lobbyUserStatus += $"{user.Mention} was **on the way** at **{lobbyUser.OnTheWayTime.ToLongTimeString()}** with {lobbyUser.UserCount} participants and an ETA of {lobbyUser.ETA}.\r\n";
        //        }

        //        lobbyUserStatus +=
        //            $"{lobby.NumUsersOnTheWay} users on their way.\r\n" +
        //            $"{lobby.NumUsersCheckedIn} users already checked in and ready.\r\n" +
        //            $"**{lobby.NumUsersCheckedIn}/{lobby.NumUsersCheckedIn + lobby.NumUsersOnTheWay}** Users Ready!\r\n";
        //    }

        //    return lobbyUserStatus;
        //}

        //private static async Task<string> CreateLobbyStatus(DiscordClient client, RaidLobby lobby)
        //{
        //    return $"**{lobby.LobbyName} RAID LOBBY** ({DateTime.Now.ToLongDateString()})\r\n" +
        //           $"**{Convert.ToUInt32(lobby.MinutesLeft)} Minutes Left!**\r\n" + //TODO: Fix minutes left.
        //           $"Raid Boss: **{lobby.PokemonName}**\r\n" +
        //           $"Start Time: {lobby.StartTime.ToLongTimeString()}\r\n" +
        //           $"Expire Time: {lobby.ExpireTime.ToLongTimeString()}\r\n" +
        //           $"Gym Name: {lobby.GymName}\r\n" +
        //           $"Address: {lobby.Address}\r\n\r\n" +
        //           await RaidLobbyUserStatus(client, lobby);
        //}
        #endregion

        #endregion

        #region Raid Lobby Reaction Extensions

        public static async Task SetDefaultRaidReactions(this DiscordClient client, DiscordMessage message, bool isLobby, bool deleteExisting = true)
        {
            if (client == null)
            {
                return;
            }

            if (deleteExisting)
            {
                await message.DeleteAllReactionsAsync();

                await Utils.Wait(10);
            }

            await message.CreateReactionAsync(DiscordEmoji.FromName(client, ":arrow_right:"));

            await message.CreateReactionAsync(DiscordEmoji.FromName(client, ":white_check_mark:"));

            if (isLobby)
            {
                await message.CreateReactionAsync(DiscordEmoji.FromName(client, ":x:"));

                await message.CreateReactionAsync(DiscordEmoji.FromName(client, ":arrows_counterclockwise:"));
            }
        }
コード例 #2
0
        // Initates multiplayer game
        public async Task BeginMultiplayerGame()
        {
            Multiplayer = true;
            EmbedDefaults.SetEmbedDefaultsMP(p1, p2);

            ActivePlayer = p1.Name;

            // Creates and sends the embed that is used as the gameboard
            DiscordEmbedBuilder gameBoard = CreatePlayField(grid.GameGrid);

            DiscordMessage embedMessage = await ctx.Channel.SendMessageAsync(embed : gameBoard).ConfigureAwait(false);

            await AddReactions(embedMessage);

            // Loops the game until the game is over.
            while (GameActive)
            {
                await MakeMove(embedMessage);

                Turn++;
            }

            SetWinnerStatus(p1, p2);
            RegisterInDatabase(p1, p2);
            await embedMessage.ModifyAsync(embed : new Optional <DiscordEmbed>(CreatePlayField(grid.GameGrid))).ConfigureAwait(false);

            await embedMessage.DeleteAllReactionsAsync();
        }
コード例 #3
0
        public static async Task SetAccountsReactions(this DiscordClient client, DiscordMessage message, bool deleteExisting = true)
        {
            if (client == null)
            {
                return;
            }

            if (deleteExisting)
            {
                await message.DeleteAllReactionsAsync();
            }

            await message.CreateReactionAsync(DiscordEmoji.FromName(client, ":one:"));

            await message.CreateReactionAsync(DiscordEmoji.FromName(client, ":two:"));

            await message.CreateReactionAsync(DiscordEmoji.FromName(client, ":three:"));

            await message.CreateReactionAsync(DiscordEmoji.FromName(client, ":four:"));

            //await message.CreateReactionAsync(DiscordEmoji.FromName(client, ":five:"));
            //await message.CreateReactionAsync(DiscordEmoji.FromName(client, ":six:"));
            //await message.CreateReactionAsync(DiscordEmoji.FromName(client, ":seven:"));
            //await message.CreateReactionAsync(DiscordEmoji.FromName(client, ":eight:"));
            //await message.CreateReactionAsync(DiscordEmoji.FromName(client, ":nine:"));
            //await message.CreateReactionAsync(DiscordEmoji.FromName(client, ":ten:"));
        }
コード例 #4
0
        public async Task Sendreactiongear(CommandContext ctx, DiscordMessage embedMessage, bool userSelf)
        {
            if (userSelf == true)
            {
                DiscordEmoji gearEmoji = DiscordEmoji.FromName(ctx.Client, ":gear:");
                await embedMessage.CreateReactionAsync(gearEmoji).ConfigureAwait(false);

                var interactivity = ctx.Client.GetInteractivity();

                try
                {
                    var ReactionResult = await interactivity.WaitForReactionAsync(
                        x => x.Message == embedMessage &&
                        x.User == ctx.User &&
                        (x.Emoji == gearEmoji)).ConfigureAwait(false);

                    if (ReactionResult.Result.Emoji == gearEmoji)
                    {
                        await embedMessage.DeleteAsync(null);
                        await SetId(ctx, ctx.Member.Id, userSelf);

                        return;
                    }
                }
                catch
                {
                    await embedMessage.DeleteAllReactionsAsync(null);
                }
            }
        }
コード例 #5
0
 private async Task UpdateReactions()
 {
     if (message != null)
     {
         try {
             await message.DeleteAllReactionsAsync("Clearing all reactions for page update");
         } catch (UnauthorizedException) {
             remindMe.BotMethods.Log(this, new LogEventArgs {
                 Message = $"ReminderList tried clearing reactions, but couldn't because it doesn't have permission. An alternative method will be used but only this bot's reactions will be removed.",
                 Type    = LogType.Warning
             });
             foreach (var reaction in message.Reactions)
             {
                 if (reaction.IsMe)
                 {
                     await message.DeleteOwnReactionAsync(reaction.Emoji);
                 }
             }
         }
         if (CanGoLeftPage)
         {
             await message.CreateReactionAsync(LeftArrowEmoji);
         }
         for (int i = 0; i < NumberOfRemindersOnPage; ++i)
         {
             await message.CreateReactionAsync(DigitEmojis[i]);
         }
         if (CanGoRightPage)
         {
             await message.CreateReactionAsync(RightArrowEmoji);
         }
     }
 }
コード例 #6
0
        public async Task AddGuildEvent(CommandContext context)
        {
            DiscordMessage msg = await context.RespondAsync($":wave: Hi, {context.User.Mention}! You wanted to create a new event?");

            await msg.CreateReactionAsync(DiscordEmoji.FromName(context.Client, ":regional_indicator_y:"));

            await msg.CreateReactionAsync(DiscordEmoji.FromName(context.Client, ":regional_indicator_n:"));

            InteractivityExtension interactivity = context.Client.GetInteractivity();

            InteractivityResult <MessageReactionAddEventArgs> interactivityResult = await interactivity.WaitForReactionAsync(msg, context.User);

            if (interactivityResult.TimedOut ||
                !interactivityResult.Result.Emoji.Equals(DiscordEmoji.FromName(context.Client, ":regional_indicator_y:")))
            {
                DiscordMessage snark = await context.RespondAsync("Well, thanks for wasting my time. Have a good day.");

                await Task.Delay(5000);

                await context.Channel.DeleteMessagesAsync(new List <DiscordMessage> {
                    msg, snark, context.Message
                });

                return;
            }

            await context.Message.DeleteAsync();

            await msg.DeleteAllReactionsAsync();

            await this.AddGuildEventInteractive(context, interactivity, msg);
        }
コード例 #7
0
        public static async Task <Reaction> AddAndWaitForYesNoReaction(this InteractivityExtension interactivity, DiscordMessage msg, DiscordUser user)
        {
            DiscordClient client = interactivity.Client;

            await msg.CreateReactionAsync(DiscordEmoji.FromName(client, ":regional_indicator_y:"));

            await msg.CreateReactionAsync(DiscordEmoji.FromName(client, ":regional_indicator_n:"));

            InteractivityResult <MessageReactionAddEventArgs> interactivityResult = await interactivity.WaitForReactionAsync(msg, user);

            if (interactivityResult.TimedOut || interactivityResult.Result.Emoji.Equals(DiscordEmoji.FromName(client, ":regional_indicator_n:")))
            {
                DiscordMessage snark = await interactivityResult.Result.Channel.SendMessageAsync($"{user.Mention}, well then why did you get my attention! Thanks for wasting my time. Let me clean up now. :triumph:");

                await Task.Delay(5000);

                await interactivityResult.Result.Channel.DeleteMessagesAsync(new List <DiscordMessage> {
                    msg, snark
                });

                return(interactivityResult.TimedOut ? Reaction.None : Reaction.No);
            }

            await msg.DeleteAllReactionsAsync();

            return(Reaction.Yes);
        }
コード例 #8
0
        public async Task <bool> Confirm(DiscordMessage msg, CommandContext ctx)
        {
            // first retrieve the interactivity module from the client
            var interactivity = ctx.Client.GetInteractivity();

            // specify the emoji
            DiscordEmoji[] EmojiOptions =
            {
                DiscordEmoji.FromName(ctx.Client, ":white_check_mark:"),
                DiscordEmoji.FromName(ctx.Client, ":x:")
            };


            foreach (DiscordEmoji e in EmojiOptions)
            {
                msg.CreateReactionAsync(e);
                Thread.Sleep(350);
            }

            // wait for a reaction
            var em = await interactivity.WaitForReactionAsync(xe => EmojiOptions.Contains(xe.Emoji), ctx.User, TimeSpan.FromSeconds(15));

            if (!em.TimedOut)
            {
                return(em.Result.Emoji == EmojiOptions[0]);
            }
            else
            {
                await msg.DeleteAllReactionsAsync();

                return(false);
            }
        }
コード例 #9
0
        public async Task Entrar(CommandContext ctx, string cenario)
        {
            switch (cenario)
            {
            case ("floresta"):

                DiscordEmbedBuilder crianca = new DiscordEmbedBuilder()
                                              .WithImageUrl("https://cdn.discordapp.com/attachments/836451973015928833/836451999263490078/D6PCcR2X4AYTpam.png")
                                              .WithFooter("Clique em ⚔️ para atacar!");

                DiscordMessage mensagem = await ctx.RespondAsync(crianca);

                List <DiscordEmoji> aroji = new List <DiscordEmoji>();

                aroji.Add(DiscordEmoji.FromName(ctx.Client, ":crossed_swords:"));

oi:

                // Reage e espera a reação correta
                DiscordEmoji emoji;
                bool reacted;
                try { (emoji, reacted) = await Embed.ReactAndAwait(mensagem, ctx.Member, aroji); }

                // Termina em caso de timeout
                catch { await Embed.End(mensagem); return; }

                await mensagem.DeleteAllReactionsAsync();

                goto oi;

                break;
            }
        }
コード例 #10
0
        /// <summary>
        /// Makes a poll and returns poll results.
        /// </summary>
        /// <param name="m">Message to create poll on.</param>
        /// <param name="emojis">Emojis to use for this poll.</param>
        /// <param name="behaviour">What to do when the poll ends.</param>
        /// <param name="timeout">override timeout period.</param>
        /// <returns></returns>
        public async Task <ReadOnlyCollection <PollEmoji> > DoPollAsync(DiscordMessage m, IEnumerable <DiscordEmoji> emojis, PollBehaviour?behaviour = default, TimeSpan?timeout = null)
        {
            if (!Utilities.HasReactionIntents(this.Client.Configuration.Intents))
            {
                throw new InvalidOperationException("No reaction intents are enabled.");
            }

            if (emojis.Count() < 1)
            {
                throw new ArgumentException("You need to provide at least one emoji for a poll!");
            }

            foreach (var em in emojis)
            {
                await m.CreateReactionAsync(em).ConfigureAwait(false);
            }
            var res = await Poller.DoPollAsync(new PollRequest(m, timeout ?? this.Config.Timeout, emojis)).ConfigureAwait(false);

            var pollbehaviour = behaviour ?? this.Config.PollBehaviour;
            var thismember    = await m.Channel.Guild.GetMemberAsync(this.Client.CurrentUser.Id).ConfigureAwait(false);

            if (pollbehaviour == PollBehaviour.DeleteEmojis && m.Channel.PermissionsFor(thismember).HasPermission(Permissions.ManageMessages))
            {
                await m.DeleteAllReactionsAsync().ConfigureAwait(false);
            }

            return(new ReadOnlyCollection <PollEmoji>(res.ToList()));
        }
コード例 #11
0
            public async Task SendTopGold(CommandContext ctx, DiscordMessage message, List <Profile> profiles, DiscordMember member)
            {
                await message.DeleteAllReactionsAsync();

                List <ProfilesList> profilesList = new List <ProfilesList>();

                foreach (Profile profile in profiles)
                {
                    profilesList.Add(new ProfilesList
                    {
                        DiscordId = profile.DiscordId,
                        Gold      = profile.Gold,
                        Level     = profile.Level
                    });
                }

                var sortedList = profilesList.OrderByDescending(x => x.Gold).ToList();

                StringBuilder sb = new StringBuilder();

                int place = 1;

                foreach (var user in sortedList)
                {
                    try
                    {
                        if (user.Level >= 1 || user.Gold > 0)
                        {
                            sb.Append($"[{place}]\t> #{ctx.Guild.GetMemberAsync(user.DiscordId).Result.Username}\n\t\tGold: {user.Gold}\n\n");
                            place += 1;
                        }
                    }
                    catch { }
                }

                var profileEmbed = new DiscordEmbedBuilder
                {
                    Timestamp   = System.DateTime.Now,
                    Title       = "Users with most gold:",
                    Description = $"```py\n{sb.ToString()}-------------------------------------------------------\n@This list only shows users who are level 1+ or have gold.\n@ To see more select an emoji below.\n```",
                    Color       = DiscordColor.Orange
                };

                await message.ModifyAsync(content : "     ", embed : profileEmbed.Build());

                var emojiList = new List <DiscordEmoji>();

                emojiList.Add(DiscordEmoji.FromName(ctx.Client, ":regional_indicator_x:"));
                emojiList.Add(DiscordEmoji.FromName(ctx.Client, ":abc:"));
                emojiList.Add(DiscordEmoji.FromName(ctx.Client, ":gotem:"));
                emojiList.Add(DiscordEmoji.FromName(ctx.Client, ":beer:"));

                foreach (var emoji in emojiList)
                {
                    await message.CreateReactionAsync(emoji);
                }

                await AwaitTopReaction(ctx, message, profiles, member, emojiList).ConfigureAwait(false);
            }
コード例 #12
0
        public async Task UnscheduleGuildEvent(CommandContext context)
        {
            using IBotAccessProvider provider = this.accessBuilder.Build();
            InteractivityExtension interactivity = context.Client.GetInteractivity();

            DiscordMessage msg = await context.RespondAsync(
                $":wave: Hi, {context.User.Mention}! You want to unschedule an event for your guild?");

            Reaction reaction = await interactivity.AddAndWaitForYesNoReaction(msg, context.User);

            if (reaction != Reaction.Yes)
            {
                return;
            }

            await context.Message.DeleteAsync();

            DateTimeZone memberTimeZone = this.timeZoneProvider[provider.GetUsersTimeZone(context.User.Id).TimeZoneId];

            List <GuildBackgroundJob> guildEventJobs = provider.GetAllAssociatedGuildBackgroundJobs(context.Guild.Id)
                                                       .Where(x => x.GuildJobType == GuildJobType.SCHEDULED_EVENT)
                                                       .OrderBy(x => x.ScheduledTime)
                                                       .ToList();

            DiscordEmbedBuilder removeEventEmbed = new DiscordEmbedBuilder()
                                                   .WithTitle("Select an event to unschedule by typing: <event number>")
                                                   .WithColor(context.Member.Color);

            CustomResult <int> result = await context.WaitForMessageAndPaginateOnMsg(
                GetScheduledEventsPages(guildEventJobs.Select(x => x.WithTimeZoneConvertedTo(memberTimeZone)), interactivity, removeEventEmbed),
                PaginationMessageFunction.CreateWaitForMessageWithIntInRange(context.User, context.Channel, 1, guildEventJobs.Count + 1),
                msg : msg);

            if (result.TimedOut || result.Cancelled)
            {
                DiscordMessage snark = await context.RespondAsync("You never gave me a valid input. Thanks for wasting my time. :triumph:");

                await Task.Delay(5000);

                await context.Channel.DeleteMessagesAsync(new List <DiscordMessage> {
                    msg, snark
                });

                return;
            }

            GuildBackgroundJob job = guildEventJobs[result.Result - 1];

            msg = await msg.ModifyAsync($"{context.User.Mention}, are you sure you want to unschedule this event?", embed : null);

            reaction = await interactivity.AddAndWaitForYesNoReaction(msg, context.User);

            BackgroundJob.Delete(job.HangfireJobId);
            provider.DeleteGuildBackgroundJob(job);
            await msg.DeleteAllReactionsAsync();

            await msg.ModifyAsync("Ok, I've unscheduled that event!", embed : null);
        }
コード例 #13
0
        public async Task Background(CommandContext ctx, int?page = null)
        {
            if (page == null || page <= 0)
            {
                page = 1;
            }
            var msgBuilder = new DiscordMessageBuilder()
                             .WithContent(CustomMethod.GetBackgroundList(ctx, (int)page))
                             .WithReply(ctx.Message.Id, true);
            DiscordMessage TopMessage = await ctx.RespondAsync(msgBuilder);

            DiscordEmoji left  = DiscordEmoji.FromName(ctx.Client, ":arrow_left:");
            DiscordEmoji right = DiscordEmoji.FromName(ctx.Client, ":arrow_right:");

            await TopMessage.CreateReactionAsync(left);

            await Task.Delay(300).ContinueWith(t => TopMessage.CreateReactionAsync(right));

            bool end = false;

            do
            {
                var result = TopMessage.WaitForReactionAsync(ctx.User, TimeSpan.FromSeconds(20));
                if (result.Result.TimedOut)
                {
                    end = result.Result.TimedOut;
                }
                else if (result.Result.Result.Emoji == left)
                {
                    await TopMessage.DeleteReactionAsync(result.Result.Result.Emoji, ctx.User);

                    if (page > 1)
                    {
                        page--;
                        await TopMessage.ModifyAsync(CustomMethod.GetBackgroundList(ctx, (int)page));
                    }
                }
                else if (result.Result.Result.Emoji == right)
                {
                    await TopMessage.DeleteReactionAsync(result.Result.Result.Emoji, ctx.User);

                    page++;
                    try
                    {
                        await TopMessage.ModifyAsync(CustomMethod.GetBackgroundList(ctx, (int)page));
                    }
                    catch (Exception)
                    {
                        page--;
                    }
                }
            } while (!end);
            await TopMessage.DeleteAllReactionsAsync();
        }
コード例 #14
0
        [Command("deletequeue"), RequirePermissions(Permissions.Administrator), Aliases(new[] { "dq" }), Description("Borra todos los elementos en la cola")]         //,
        public async Task deletequeue(CommandContext ctx)
        {
            DiscordMessage msg = await ctx.RespondAsync("Estas seguro que quieres eliminar toda la lista de recodes?");

            bool confirmation = await Confirm(msg, ctx);

            if (confirmation)
            {
                Encoder.Instance.EncodeQueue.Clear();
                Encoder.Instance.SaveCurentQueueToFile();
                Encoder.Instance.SendUpdateToChannel();
                msg.ModifyAsync("Se han borrado todos los elementos");
                msg.DeleteAllReactionsAsync();
            }
            else
            {
                msg.ModifyAsync("Operacion cancelada");
                msg.DeleteAllReactionsAsync();
            }
        }
コード例 #15
0
ファイル: TestCommands.cs プロジェクト: Shizukanawa/KaeruBot
        public async Task React(CommandContext ctx)
        {
            var emoji1 = DiscordEmoji.FromName(ctx.Client, ":one:");
            var emoji2 = DiscordEmoji.FromName(ctx.Client, ":two:");

            var embed = new DiscordEmbedBuilder()
            {
                Description = "1",
            };

            var embed2 = new DiscordEmbedBuilder()
            {
                Description = "2",
            };

            DiscordMessage Embed = await ctx.RespondAsync(embed : embed.Build());

            await Embed.CreateReactionAsync(emoji1);

            await Task.Delay(500);

            await Embed.CreateReactionAsync(emoji2);

            var interactivity = ctx.Client.GetInteractivity();
            var result1       = await interactivity.WaitForReactionAsync(x => x.Emoji == emoji1, ctx.User, TimeSpan.FromSeconds(60));

            var result2 = await interactivity.WaitForReactionAsync(x => x.Emoji == emoji2, ctx.User, TimeSpan.FromSeconds(60));

            if (result1.Result != null)
            {
                await Embed.ModifyAsync(embed : embed.Build());

                await Embed.DeleteAllReactionsAsync();
            }
            if (result2.Result != null)
            {
                await Embed.ModifyAsync(embed : embed2.Build());

                await Embed.DeleteAllReactionsAsync();
            }
        }
コード例 #16
0
        public async Task deleteelement(CommandContext ctx, [Description("Numero de elemento que borrar")] int nqueue)
        {
            Encode         e   = Encoder.Instance.EncodeQueue.ToArray()[nqueue];
            DiscordMessage msg = await ctx.RespondAsync($"Se borrara \"{e.Anime.GetInfo()}\"\nEstas de acuerdo?");

            bool confirmation = await Confirm(msg, ctx);

            if (confirmation)
            {
                Encoder.Instance.EncodeQueue.Remove(e);
                Encoder.Instance.SaveCurentQueueToFile();
                Encoder.Instance.SendUpdateToChannel();
                msg.DeleteAllReactionsAsync();
                msg.ModifyAsync($"Se ha borrado \"{e.Anime.GetInfo()}\" de la lista");
            }
            else
            {
                msg.DeleteAllReactionsAsync();
                msg.ModifyAsync($"Operacion cancelada");
            }
        }
コード例 #17
0
        public async Task SendCooldownAlarm(CommandContext ctx, DiscordMessage msg, TimeSpan timeSpan)
        {
            try
            {
                await msg.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client, ":alarm_clock:"));

                var interactivity = ctx.Client.GetInteractivity();

                var reaction = await interactivity.WaitForReactionAsync(
                    x => x.Message == msg &&
                    x.User.Id == ctx.Member.Id &&
                    x.Emoji == DiscordEmoji.FromName(ctx.Client, ":alarm_clock:"));

                if (!reaction.TimedOut)
                {
                    await msg.DeleteAllReactionsAsync();

                    DiscordDmChannel dmChannel = ctx.Guild.GetMemberAsync(ctx.Member.Id).Result.CreateDmChannelAsync().Result;

                    DiscordEmbedBuilder CooldownEmbed = new DiscordEmbedBuilder()
                    {
                        Title = $"Your timer has been set.",
                        Color = DiscordColor.Red
                    };
                    CooldownEmbed.WithFooter("Keep in mind this timer will only go off if the bot is not reset (which happens fairly often).");

                    await msg.ModifyAsync(embed : CooldownEmbed.Build());

                    System.Threading.Thread.Sleep(Convert.ToInt32(timeSpan.TotalMilliseconds));

                    await dmChannel.SendMessageAsync($"Your cooldown has ended, you can now rob to your hearts content.");
                }
                else
                {
                    await msg.DeleteAllReactionsAsync();
                }
            }
            catch { await msg.DeleteAllReactionsAsync().ConfigureAwait(false); }
        }
コード例 #18
0
ファイル: UtilsCommands.cs プロジェクト: Oleuua/sotbot
        public async Task UpdateEmissaryMessage(CommandContext ctx, DiscordMessage message)
        {
            if (!Bot.IsModerator(ctx.Member))
            {
                await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} У вас нет доступа к этой команде!");

                return;
            }

            await ctx.Channel.DeleteMessageAsync(await ctx.Channel.GetMessageAsync(ctx.Channel.LastMessageId));

            //Обновляем настроки бота
            if (Bot.BotSettings.EmissaryMessageId != message.Id)
            {
                Bot.EditSettings("EmissaryMessageId", message.Id.ToString());
            }

            //Убираем все реакции с сообщения
            await message.DeleteAllReactionsAsync();

            //Добавляем реакции к сообщению
            await message.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client, ":moneybag:"));

            await Task.Delay(400);

            await message.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client, ":pig:"));

            await Task.Delay(400);

            await message.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client, ":skeleton:"));

            await Task.Delay(400);

            await message.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client, ":gem:"));

            await Task.Delay(400);

            await message.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client, ":skull_and_crossbones:"));

            await Task.Delay(400);

            await message.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client, ":fish:"));

            await Task.Delay(400);

            await message.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client, ":crossed_swords:"));

            await Task.Delay(400);

            await message.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client, ":x:"));
        }
コード例 #19
0
        public async Task TicTacToe(CommandContext ctx, DiscordMember member)
        {
            DiscordEmoji   circle   = DiscordEmoji.FromName(ctx.Client, ":o:");
            DiscordEmoji   cross    = DiscordEmoji.FromName(ctx.Client, ":x:");
            DiscordEmoji   agree    = DiscordEmoji.FromName(ctx.Client, ":+1:");
            DiscordEmoji   disagree = DiscordEmoji.FromName(ctx.Client, ":-1:");
            DiscordMessage message  = await ctx.Channel.SendMessageAsync(embed : Embeds.SendTttReactEmbed(member)).ConfigureAwait(false);

            await message.CreateReactionAsync(agree).ConfigureAwait(false);

            await message.CreateReactionAsync(disagree).ConfigureAwait(false);

            InteractivityResult <MessageReactionAddEventArgs> reactionAsync = await message.WaitForReactionAsync(member, TimeSpan.FromSeconds(45));

            if (reactionAsync.Result.Emoji.Name == agree.Name)
            {
                await message.DeleteAllReactionsAsync();

                await message.ModifyAsync(
                    "Let's begin!\nType numbers 1-9 to make a move\n" +
                    circle + " Represents: " + member.Mention + " & This player begins\n" +
                    cross + " Represents: " + ctx.Member.Mention,
                    embed : null);
                await TTT(ctx, member);
            }
            else if (reactionAsync.Result?.Emoji.Name == disagree.Name)
            {
                await message.DeleteAllReactionsAsync();

                await message.ModifyAsync(embed : Embeds.Cancelled);
            }
            else if (reactionAsync.TimedOut)
            {
                await message.DeleteAllReactionsAsync();

                await message.ModifyAsync(embed : Embeds.TimeOut);
            }
        }
コード例 #20
0
            public async Task DeleteReactionsAsync(CommandContext ctx,
                                                   [Description("Message.")] DiscordMessage message      = null,
                                                   [RemainingText, Description("Reason.")] string reason = null)
            {
                message = message ?? (await ctx.Channel.GetMessagesBeforeAsync(ctx.Channel.LastMessageId, 1)).FirstOrDefault();
                if (message == null)
                {
                    throw new CommandFailedException("Cannot find the specified message.");
                }

                await message.DeleteAllReactionsAsync(ctx.BuildInvocationDetailsString(reason));

                await this.InformAsync(ctx, important : false);
            }
コード例 #21
0
ファイル: UtilsCommands.cs プロジェクト: Oleuua/sotbot
        public async Task CodexMessage(CommandContext ctx, DiscordMessage message)
        {
            await ctx.Channel.DeleteMessageAsync(await ctx.Channel.GetMessageAsync(ctx.Channel.LastMessageId));

            //Обновляем настроки бота
            if (Bot.BotSettings.CodexMessageId != message.Id)
            {
                Bot.EditSettings("CodexMessageId", message.Id.ToString());
            }

            //Убираем все реакции с сообщения
            await message.DeleteAllReactionsAsync();

            //Добавляем реакции к сообщению
            await message.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client, ":white_check_mark:"));
        }
コード例 #22
0
        public async Task SendBasicInfo(CommandContext ctx, DiscordMessage message, Profile profile, DiscordMember member)
        {
            await message.DeleteAllReactionsAsync();

            var profileEmbed = new DiscordEmbedBuilder
            {
                Title       = $"{member.DisplayName}'s Profile.",
                Description = $"[Extra Stats](https://grafana.wiggims1.com/d/TclixHkMz/discord-member-stats?orgId=1&var-DiscordId={ member.Id }&var-GuildId={ ctx.Guild.Id}) Username and Password is 'guest'.",
                Thumbnail   = new DiscordEmbedBuilder.EmbedThumbnail {
                    Url = member.AvatarUrl
                },
                Color     = member.Color,
                Timestamp = System.DateTime.Now
            };

            profileEmbed.WithFooter("Please don't f**k around with shit on the Grafana website, Everyone shares the same account and id rather not take it down.");

            profileEmbed.AddField("Level", $"{profile.Level.ToString()} - `{profile.Xp} xp`", true);
            profileEmbed.AddField("Gold", ":moneybag: " + profile.Gold.ToString(), true);
            profileEmbed.AddField("Gots", profile.Gots.ToString(), true);
            profileEmbed.AddField("Boganness", profile.Boganometer.ToString() + " %", true);
            if (profile.LeaveCount > 0)
            {
                profileEmbed.AddField("Leave count", profile.LeaveCount.ToString(), true);
            }

            await message.ModifyAsync(content : "     ", embed : profileEmbed.Build());

            var emojiList = new List <DiscordEmoji>();

            emojiList.Add(DiscordEmoji.FromName(ctx.Client, ":abc:"));
            emojiList.Add(DiscordEmoji.FromName(ctx.Client, ":joystick:"));
            emojiList.Add(DiscordEmoji.FromName(ctx.Client, ":gear:"));
            emojiList.Add(DiscordEmoji.FromName(ctx.Client, ":scroll:"));
            if (member.Id == ctx.Member.Id)
            {
                emojiList.Add(DiscordEmoji.FromName(ctx.Client, ":shopping_cart:"));
            }

            foreach (var emoji in emojiList)
            {
                await message.CreateReactionAsync(emoji);
            }

            await AwaitReaction(ctx, message, profile, member, emojiList).ConfigureAwait(false);
        }
コード例 #23
0
        public static async Task SetEtaReactions(this DiscordClient client, DiscordMessage message, bool deleteExisting = true)
        {
            if (client == null)
            {
                return;
            }

            if (deleteExisting)
            {
                await message.DeleteAllReactionsAsync();
            }

            await message.CreateReactionAsync(DiscordEmoji.FromName(client, ":five:"));

            await message.CreateReactionAsync(DiscordEmoji.FromName(client, ":keycap_ten:"));

            //TODO: Add more ETA reactions.
        }
コード例 #24
0
        static public async Task <DiscordMessage> SendEmbed(DiscordMessage msg, DiscordEmbed embed, string content = "")
        {
            // Tenta editar a mensagem
            DiscordMessage sentMsg;

            try
            {
                await msg.DeleteAllReactionsAsync();

                sentMsg = await msg.ModifyAsync(content, embed);
            }
            // Senão, manda uma mensagem nova
            catch
            {
                sentMsg = await msg.Channel.SendMessageAsync(embed);
            }
            return(sentMsg);
        }
コード例 #25
0
        public async Task DoCleanupAsync()
        {
            switch (_deletion)
            {
            case PaginationDeletion.DeleteEmojis:
                await _message.DeleteAllReactionsAsync().ConfigureAwait(false);

                break;

            case PaginationDeletion.DeleteMessage:
                await _message.DeleteAsync().ConfigureAwait(false);

                break;

            case PaginationDeletion.KeepEmojis:
                break;
            }
        }
コード例 #26
0
        // ########### Profile Tasks ##############

        public async Task AwaitReaction(CommandContext ctx, DiscordMessage message, Profile profile, DiscordMember member, List <DiscordEmoji> emojis)
        {
            try
            {
                var interactivity = ctx.Client.GetInteractivity();

                foreach (var emoji in emojis)
                {
                    await message.CreateReactionAsync(emoji);
                }

                var ReactionResult = await interactivity.WaitForReactionAsync(
                    x => x.Message == message &&
                    x.User == ctx.User &&
                    (emojis.Contains(x.Emoji))).ConfigureAwait(false);

                if (ReactionResult.Result.Emoji == DiscordEmoji.FromName(ctx.Client, ":abc:"))
                {
                    await SendSpellingInfo(ctx, message, profile, member);
                }
                else if (ReactionResult.Result.Emoji == DiscordEmoji.FromName(ctx.Client, ":joystick:"))
                {
                    await SendGameIdInfo(ctx, message, profile, member);
                }
                else if (ReactionResult.Result.Emoji == DiscordEmoji.FromName(ctx.Client, ":gear:"))
                {
                    await SendProfilePrefsInfo(ctx, message, profile, member);
                }
                else if (ReactionResult.Result.Emoji == DiscordEmoji.FromName(ctx.Client, ":smiley:"))
                {
                    await SendBasicInfo(ctx, message, profile, member);
                }
                else if (ReactionResult.Result.Emoji == DiscordEmoji.FromName(ctx.Client, ":scroll:"))
                {
                    await SendUserInventory(ctx, message, profile, member);
                }
                else if (ReactionResult.Result.Emoji == DiscordEmoji.FromName(ctx.Client, ":shopping_cart:"))
                {
                    await showShop(ctx, message, profile, member);
                }
            }
            catch
            { await message.DeleteAllReactionsAsync(); }
        }
コード例 #27
0
        public async Task SendSpellingInfo(CommandContext ctx, DiscordMessage message, Profile profile, DiscordMember member)
        {
            await message.DeleteAllReactionsAsync();

            var profileEmbed = new DiscordEmbedBuilder
            {
                Title     = $"{member.DisplayName}'s spelling stats.",
                Thumbnail = new DiscordEmbedBuilder.EmbedThumbnail {
                    Url = member.AvatarUrl
                },
                Color     = member.Color,
                Timestamp = System.DateTime.Now
            };

            profileEmbed.AddField("Words Spelled Correctly:", profile.SpellCorrectCount.ToString(), true);
            profileEmbed.AddField("Words Spelled Incorrectly:", profile.SpellErrorCount.ToString(), true);
            profileEmbed.AddField("Spelling Accuracy:", profile.SpellAcc.ToString() + " %", true);
            profileEmbed.AddField("Most Recent Spelling Mistakes (not working):", profile.SpellErrorList.ToString(), true);

            profileEmbed.WithFooter("Please use `w!addtodictionary` if you wish, don't abuse, you will be black listed from the command.");

            await message.ModifyAsync(content : "     ", embed : profileEmbed.Build());

            var emojiList = new List <DiscordEmoji>();

            emojiList.Add(DiscordEmoji.FromName(ctx.Client, ":smiley:"));
            emojiList.Add(DiscordEmoji.FromName(ctx.Client, ":joystick:"));
            emojiList.Add(DiscordEmoji.FromName(ctx.Client, ":gear:"));
            emojiList.Add(DiscordEmoji.FromName(ctx.Client, ":scroll:"));
            if (member.Id == ctx.Member.Id)
            {
                emojiList.Add(DiscordEmoji.FromName(ctx.Client, ":shopping_cart:"));
            }

            foreach (var emoji in emojiList)
            {
                await message.CreateReactionAsync(emoji);
            }

            await AwaitReaction(ctx, message, profile, member, emojiList).ConfigureAwait(false);
        }
コード例 #28
0
        private async Task UpdateRolePost(CommandArgs <RoleBotConfig> args)
        {
            if (args.Config.RolePostChannelID != 0 && args.Config.RolePostID != 0)
            {
                DiscordChannel channel = args.Guild.GetChannel(args.Config.RolePostChannelID);
                DiscordMessage message = await channel?.GetMessageAsync(args.Config.RolePostID);

                if (message != null)
                {
                    await message.ModifyAsync(FormatRolePost(args.Guild, args.Config));

                    await message.DeleteAllReactionsAsync();

                    foreach (var emojiRole in args.Config.EmojiRoles)
                    {
                        DiscordEmoji emoji = DiscordEmoji.FromName(Instance.Client, emojiRole.Key);
                        await message.CreateReactionAsync(emoji);
                    }
                }
            }
        }
コード例 #29
0
        internal static async Task BotClientMessageDeleted(MessageDeleteEventArgs e)
        {
            if (e.Channel.Id == Program.Settings.RimboardChannelId)
            {
                // Be warned: OriginalReactCount is always equal to -1.
                PinInfo pinInfo = await QueryPinInfoFromRimboardId(e.Message.Id);

                if (!pinInfo.Equals(PinInfo.Invalid))
                {
                    // Get the channels.
                    DiscordChannel originalChannel = e.Guild.GetChannel(pinInfo.OriginalChannelId);

                    DiscordMessage originalMessage = await originalChannel.GetMessageAsync(pinInfo.OriginalMessageId);

                    var a = originalMessage.DeleteAllReactionsAsync();
                    var b = RemovePinFromDatabase(pinInfo);

                    await Task.WhenAll(a, b);
                }
            }
        }
コード例 #30
0
            // ########### top profile tasks ##############
            public async Task AwaitTopReaction(CommandContext ctx, DiscordMessage message, List <Profile> profiles, DiscordMember member, List <DiscordEmoji> emojis)
            {
                try
                {
                    var interactivity = ctx.Client.GetInteractivity();

                    foreach (var emoji in emojis)
                    {
                        await message.CreateReactionAsync(emoji);
                    }

                    var ReactionResult = await interactivity.WaitForReactionAsync(
                        x => x.Message == message &&
                        x.User == ctx.User &&
                        (emojis.Contains(x.Emoji))).ConfigureAwait(false);

                    if (ReactionResult.Result.Emoji == DiscordEmoji.FromName(ctx.Client, ":moneybag:"))
                    {
                        await SendTopGold(ctx, message, profiles, member);
                    }
                    else if (ReactionResult.Result.Emoji == DiscordEmoji.FromName(ctx.Client, ":abc:"))
                    {
                        await SendTopSpelling(ctx, message, profiles, member);
                    }
                    else if (ReactionResult.Result.Emoji == DiscordEmoji.FromName(ctx.Client, ":regional_indicator_x:"))
                    {
                        await SendTopXp(ctx, message, profiles, member);
                    }
                    else if (ReactionResult.Result.Emoji == DiscordEmoji.FromName(ctx.Client, ":gotem:"))
                    {
                        await SendTopGots(ctx, message, profiles, member);
                    }
                    else if (ReactionResult.Result.Emoji == DiscordEmoji.FromName(ctx.Client, ":beer:"))
                    {
                        await SendTopBogan(ctx, message, profiles, member);
                    }
                }
                catch
                { await message.DeleteAllReactionsAsync(); }
            }