示例#1
0
        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;
                }
            }
        }
示例#2
0
        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);
            });
        }