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()); }
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()); }
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()); } }