private void RemovePollFromId(PollIdentifier Poll) { if (PollMessageIds.ContainsKey(Poll.MessageId)) { List <PollIdentifier> polls = new List <PollIdentifier>(); polls.RemoveAll(t => t.Identical(Poll)); if (polls.Count == 0) { PollMessageIds.Remove(Poll.MessageId); } else { PollMessageIds[Poll.MessageId] = polls; } } }
public async Task RegisterPollAsync(Poll Poll, bool SendEmbed = true) { if (SendEmbed) { SocketGuild guild = Global.Client.GetGuild(Poll.GuildId); ITextChannel ch = guild.GetTextChannel(Poll.ChannelId); IUserMessage message = await ch.SendMessageAsync("", embed : Poll.CreateEmbed().Build()); foreach (IEmote emote in Poll.ReactionEmotes.Select(t => new Emoji(t))) { await message.AddReactionAsync(emote); } IUser usr = Global.Client.GetUser(Poll.PollCreator); if (usr == null) { foreach (IGuild g in Global.Client.Guilds) { IUser u = g.GetUserAsync(Poll.PollCreator).Result; if (u != null) { usr = u; break; } } } IDMChannel channel = await usr.CreateDMChannelAsync(); EmbedBuilder builder = new EmbedBuilder() { Title = "New poll registered!", Description = $"Question: { Poll.PollText }\nID: { Poll.PollId }\nMade on guild: { guild.Name } in #{ ch.Name }", Color = Color.Green }; await channel.SendMessageAsync("", embed : builder.Build()); Poll.MessageId = message.Id; if (!Polls.ContainsKey(Poll.PollCreator)) { Polls.Add(Poll.PollCreator, new List <Poll>()); } Polls[Poll.PollCreator].Add(Poll); } if (PollMessageIds.ContainsKey(Poll.MessageId)) { PollMessageIds[Poll.MessageId].Add(Poll); } else { PollMessageIds.Add(Poll.MessageId, new List <PollIdentifier>() { Poll }); } Task pollTask = Task.Run(async() => { TimeSpan ts = Poll.PollCreatedAt + Poll.Duration - TimeSpan.FromTicks(DateTime.Now.Ticks); if (ts > TimeSpan.Zero) { try { await Task.Delay(ts, Poll.CToken); } catch (OperationCanceledException) { } } await UnregisterPollAsync(Poll); }); }