private async Task Pagination(DiscordMessage message, int pageNum) { var result = await Interactivity.WaitForReactionAsync(react => { if (react.Message.Id != message.Id) { return(false); } if (!LeftRightStop().Contains(react.Emoji.Name)) { return(false); } return(IsValidUser(react.User, react.Guild)); }, Timeout); if (result.TimedOut) { FinalAction?.Invoke(message); return; } var newPageNum = pageNum; var e = result.Result.Emoji.Name; if (e == Left) { if (newPageNum > 1) { newPageNum--; } } else if (e == Right) { if (newPageNum < Pages) { newPageNum++; } } else if (e == Stop) { FinalAction?.Invoke(message); return; } await result.Result.Message.DeleteReactionAsync(result.Result.Emoji, result.Result.User); var m = await message.ModifyAsync(embed : RenderPage(newPageNum)); await Pagination(m, newPageNum); }
private async Task AssignRoleToMember(GuildMemberAddEventArgs e, DiscordChannel channel) { var msg = await channel.SendMessageAsync("Please take your time and select the region you usually play in."); var emojiUS = DiscordEmoji.FromName(Client, ":flag_us:"); var emojiEU = DiscordEmoji.FromName(Client, ":flag_eu:"); var emojiSEA = DiscordEmoji.FromName(Client, ":ocean:"); var emojiBR = DiscordEmoji.FromName(Client, ":flag_br:"); var emojiRU = DiscordEmoji.FromName(Client, ":flag_ru:"); var emojiAU = DiscordEmoji.FromName(Client, ":flag_au:"); var emojiList = new List <DiscordEmoji>() { emojiUS, emojiEU, emojiSEA, emojiBR, emojiRU, emojiAU }; foreach (var emoji in emojiList) { await msg.CreateReactionAsync(emoji); await Task.Delay(250); } var reaction = await Interactivity.WaitForReactionAsync(xe => emojiList.Contains(xe), e.Member, TimeSpan.FromSeconds(60)); if (reaction != null) { switch (reaction.Emoji.GetDiscordName()) { // :flag_us: emoji case ":flag_us:": await AssignRoleToMemberAsync(e, "NA"); break; // :flag_eu: emoji case ":flag_eu:": await AssignRoleToMemberAsync(e, "EU"); break; // :ocean: emoji, representing SEA region for now.. case ":ocean:": await AssignRoleToMemberAsync(e, "SEA"); break; // :flag_br: emoji case ":flag_br:": await AssignRoleToMemberAsync(e, "BR"); break; // :flag_ru: emoji case ":flag_ru:": await AssignRoleToMemberAsync(e, "RU-S-A"); break; // :flag_au: emoji case ":flag_au:": await AssignRoleToMemberAsync(e, "AUS"); break; default: await channel.SendMessageAsync("It broke.."); break; } await channel.SendMessageAsync("All done! If you don't mind playing in multiple regions, message the server admin or one of the mods to assign you the role needed."); } else { await channel.SendMessageAsync("Very well then, if you wish to have a role assigned later on, message the server admin or one of the mods."); } }
private async Task Pagination(DiscordMessage message, int pageNum) { var result = await Interactivity.WaitForReactionAsync(react => { if (react.Message.Id != message.Id) { return(false); } if (LeftRightStop().Contains(react.Emoji.Name)) { return(IsValidUser(react.User, react.Guild)); } if (BigLeftRight().Contains(react.Emoji.Name)) { return(BulkSkipNumber > 1 && IsValidUser(react.User, react.Guild)); } return(false); }, Timeout); if (result.TimedOut) { FinalAction?.Invoke(message); return; } var newPageNum = pageNum; var e = result.Result.Emoji.Name; if (e == Left) { if (newPageNum == 1 && WrapPageEnds) { newPageNum = Pages + 1; } if (newPageNum > 1) { newPageNum--; } } else if (e == Right) { if (newPageNum == Pages && WrapPageEnds) { newPageNum = 0; } if (newPageNum < Pages) { newPageNum++; } } else if (e == BigLeft) { if (newPageNum > 1 || WrapPageEnds) { for (int i = 1; (newPageNum > 1 || WrapPageEnds) && i < BulkSkipNumber; i++) { if (newPageNum == 1 && WrapPageEnds) { newPageNum = Pages + 1; } newPageNum--; } } } else if (e == BigRight) { if (newPageNum < Pages || WrapPageEnds) { for (int i = 1; (newPageNum < Pages || WrapPageEnds) && i < BulkSkipNumber; i++) { if (newPageNum == Pages && WrapPageEnds) { newPageNum = 0; } newPageNum++; } } } else if (e == Stop) { FinalAction?.Invoke(message); return; } await result.Result.Message.DeleteReactionAsync(result.Result.Emoji, result.Result.User); var m = await message.ModifyAsync(content : Text?.Invoke(pageNum, Pages), embed : RenderPage(newPageNum)); await Pagination(m, newPageNum); }