public async Task <IResult> ExecuteAsync(SocketMessageComponent arg)
        {
            if (!messages.TryGetValue(arg.Message?.Id ?? 0, out var data))
            {
                return(ExecuteResult.FromError(CommandError.Unsuccessful, "No state data found, unknown callback"));
            }

            var args = new CallbackEventArgs()
            {
                ComponentId = arg.Data.CustomId,
                Message     = arg.Message,
                State       = data.State,
                User        = arg.User,
                Interaction = arg
            };

            try
            {
                var result = await data.Method.Invoke(args).ConfigureAwait(false);

                return(result);
            } catch (Exception ex)
            {
                return(ExecuteResult.FromError(ex));
            }
            return(ExecuteResult.FromSuccess());
        }
Esempio n. 2
0
        static async System.Threading.Tasks.Task <BotResult> runReactions(CallbackEventArgs e)
        {
            if (!(ulong.TryParse(e.State, out var guildId)))
            {
                return(new BotResult($"Failed to parse '{e.State}' as ulong."));
            }
            if (!(instance.Messages.TryGetValue(guildId, out var setup)))
            {
                return(new BotResult($"Guild {guildId} has no reaction roles set up."));
            }
            if (!(ulong.TryParse(e.ComponentId, out var roleId)))
            {
                return(new BotResult($"Failed to parse custom id as ulong: {e.ComponentId}"));
            }
            if (!(e.Message.Channel is ITextChannel txt))
            {
                return(new BotResult($"Current channel, {e.Message.Channel} is not a text channel"));
            }
            var role = txt.Guild.GetRole(roleId);

            if (role == null)
            {
                return(new BotResult($"Role {roleId} does not exist."));
            }
            var perm = $"roles.{role.Guild.Id}.{role.Id}";
            var user = await txt.Guild.GetUserAsync(e.User.Id);

            var bUser = Program.GetUser(user);

            if (PermChecker.UserHasPerm(bUser, perm) == false)
            {
                return(new BotResult($"You lack the permission to toggle that role.\r\n" /*+
                                                                                          * $"Use `{Program.Prefix}perms viewo {bUser.Id}` to see what permissions they do have."*/));
            }
            if (user.RoleIds.Any(x => x == roleId))
            {
                await user.RemoveRoleAsync(role);

                await e.Interaction.FollowupAsync($"You no longer have the {role.Name} role",
                                                  ephemeral : true);
            }
            else
            {
                await user.AddRoleAsync(role);

                await e.Interaction.FollowupAsync($"You now have the {role.Name} role",
                                                  ephemeral : true);
            }
            return(new BotResult());
        }
Esempio n. 3
0
        public static async Task handleReact(CallbackEventArgs e)
        {
            await e.Interaction.AcknowledgeAsync(InteractionResponseFlags.Ephemeral);

            var result = runReactions(e).Result;

            if (!result.IsSuccess)
            {
                await e.Interaction.FollowupAsync($"Failed to change your role: {result.Reason}", ephemeral : true);
            }
            if (Inspection != null)
            {
                var builder = new EmbedBuilder();
                builder.Title = "Reaction Role";
                builder.AddField("User", $"{e.User.Username}#{e.User.Discriminator}\r\n{e.User.Id}", true);
                builder.AddField("Button", e.ComponentId, true);
                builder.Description = $"**{result.Reason}**";
                await Inspection.SendMessageAsync(embed : builder.Build());
            }
        }
        public async Task <IResult> Invoke(CallbackEventArgs args)
        {
            Task task;

            if (_eh != null)
            {
                task = _eh.DynamicInvoke(new object[] { args }) as Task ?? Task.Delay(0);
            }
            else
            {
                task = GetMethod().Invoke(null, new object[] { args }) as Task ?? Task.Delay(0);
            }

            if (task is Task <RuntimeResult> resultTask)
            {
                return(await resultTask.ConfigureAwait(false));
            }
            else
            {
                await task.ConfigureAwait(false);

                return(ExecuteResult.FromSuccess());
            }
        }