public static async Task SendEndingMessage(ISocketMessageChannel channel, string adventurename, string segIndex) { Adventure adventure = adventures[adventurename]; AdventureSegment segment = adventure.segments[segIndex]; await channel.SendMessageAsync(string.Format("**{0}**", segment.maintext)); string ord; if (new int[] { 11, 12, 13 }.Contains(adventure.config.plays)) { ord = "th"; } else { switch (adventure.config.plays.ToString().Last()) { case '1': ord = "st"; break; case '2': ord = "nd"; break; case '3': ord = "rd"; break; default: ord = "th"; break; } } string place = adventure.config.plays.ToString() + ord; EmbedBuilder builder = new EmbedBuilder() .WithTitle("Ending") .WithDescription(string.Format("``` {0} ```", segment.choicetext)) .WithColor(new Color(0xf26500)) .WithFooter(footer => footer.WithText(string.Format("You are the {0} player", place))); Embed embed = builder.Build(); await Task.Delay(Convert.ToInt32(segment.maintext.Length / charPerSec * 1000)); await channel.SendMessageAsync(null, embed : embed); }
public static Embed GetChoiceEmbed(string adventurename, string segmentname) { AdventureSegment segment = adventures[adventurename].segments[segmentname]; var builder = new EmbedBuilder() .WithTitle("choice") .WithDescription(string.Format("``` {0} ```", segment.choicetext)) .WithColor(new Color(0xCB755A)); // if blank default e.g "what do you do?" foreach (AdventureChoice choice in segment.choices) { builder.AddField(choice.text, choice.emote, true); } return(builder.Build()); }
public static async Task <IUserMessage> SendSegmentMessage(ISocketMessageChannel channel, string adventurename, string segIndex) { AdventureSegment segment = adventures[adventurename].segments[segIndex]; await channel.SendMessageAsync(string.Format("**{0}**", segment.maintext)); Embed embed = GetChoiceEmbed(adventurename, segIndex); await Task.Delay(Convert.ToInt32(segment.maintext.Length / charPerSec * 1000)); IUserMessage msg = await channel.SendMessageAsync(null, embed : embed); messageMarker messageMarker = new messageMarker(msg.Id, adventurename, segIndex); foreach (Emoji emote in GetChoiceEmotes(adventurename, segIndex)) { await msg.AddReactionAsync(emote); } return(msg); }
private async Task OnReactionAdded(Discord.Cacheable <Discord.IUserMessage, ulong> message, ISocketMessageChannel channel, SocketReaction reaction) { string segIndex = ""; messageMarker messageMarker = messageMarkers[channel.Id]; if (reaction.User.Value.IsBot || message.Id != messageMarker.messageId) { return; } Adventure adventure = adventures[messageMarker.adventureName]; AdventureSegment segment = adventure.segments[messageMarker.segIndex]; foreach (AdventureChoice choice in segment.choices) { Emoji emoji = new Emoji(choice.emote); IUserMessage msg = await message.GetOrDownloadAsync(); if ((await msg.GetReactionUsersAsync(emoji, 5).FlattenAsync()).Count() > 1) { segIndex = choice.target; } } if (adventure.segments[segIndex].choices.Count() > 0) { IUserMessage newmsg = await SendSegmentMessage(channel, messageMarker.adventureName, segIndex); messageMarkers[channel.Id] = new messageMarker(newmsg.Id, messageMarker.adventureName, segIndex); } else { IncrementPlays(messageMarker.adventureName); await SendEndingMessage(channel, messageMarker.adventureName, segIndex); messageMarkers.Remove(channel.Id); } }