Exemple #1
0
        /// <summary>
        /// Gets or creates welcome message and refreshes reaction emojis
        /// </summary>
        /// <returns></returns>
        public async Task WelcomeMessageInit()
        {
            var existingWelcomeMessage = DateTextChannel.GetMessageAsync(WelcomeMessageId);
            //TODO Would be nice to have an override for one action with many emojis, passing emoji in for simplicity
            var answers = new Answer[2 + OptionEmojis.Count()];

            answers[0] = new Answer(MaleEmoji, e => {
                //TODO doesn't add those that are not yet in activity

                UserState uState  = AddOrGetUserState(e.User);
                uState.Gender     = GenderEnum.Male;
                uState.AgeOptions = 0;
            });
            answers[1] = new Answer(FemaleEmoji, e => {
                UserState uState  = AddOrGetUserState(e.User);
                uState.Gender     = GenderEnum.Female;
                uState.AgeOptions = 0;
            });
            for (int i = 2; i < answers.Length; i++)
            {
                var index = i;
                answers[index] = new Answer(OptionEmojis[index - 2], e => {
                    UserState uState = AddOrGetUserState(e.User);
                    var option       = 1 << (index - 2);
                    if (uState.Gender == GenderEnum.Female)
                    {
                        uState.AgeOptions ^= option;                         //toggle age group
                    }
                    else
                    {
                        uState.AgeOptions = option;
                    }
                });
            }

            Task.WaitAny(new Task[] { existingWelcomeMessage, Task.Delay(5000) });
            WelcomeMessage = await DialogFramework.CreateQuestion(DateTextChannel, WelcomeMessageBody, answers,
                                                                  existingMessage : !existingWelcomeMessage.IsFaulted?existingWelcomeMessage.Result : null,
                                                                  behavior : MessageBehavior.Permanent, deleteAnswer : true, deleteAnswerTimeout : TimeSpan.Zero);

            WelcomeMessageId = WelcomeMessage.Id;
        }
Exemple #2
0
        /// <summary>
        /// Gets all channels, members in them and set's up event handlers
        /// </summary>
        /// <param name="guild"></param>
        /// <returns></returns>
        internal async Task Initialize(DiscordGuild guild)
        {
            //DebugLogWriteLine($"Initiating {guild} GuildTask... ");
            //Init guild
            Guild   = guild;
            GuildId = guild.Id;
            SecretRoomOverwriteBuilder = new DiscordOverwriteBuilder();
            SecretRoomOverwriteBuilder.For(Guild.EveryoneRole);
            SecretRoomOverwriteBuilder.Deny(Permissions.AccessChannels);
            //PersonalChannelOverwriteBuilder = new DiscordOverwriteBuilder();
            //PersonalChannelOverwriteBuilder.Allow(Permissions.AccessChannels);

            LogChannel = guild.GetChannel(LogChannelId);
            if (LogChannel != null)
            {
                LogMessage = await LogChannel.SendMessageAsync($"Begin of log {DateTime.Now.ToString()}\n");
            }

            //Init RootCategory
            Guild.Channels.TryGetValue(DateCategoryId, out DiscordChannel cat);
            if (cat == null)
            {
                string m = $"Initialize failed. No Category found on + {DateCategoryId}";
                //DebugLogWriteLine(m);
                throw new Exception(m);
            }
            DateRootCategory = cat;
            Guild.Channels.TryGetValue(DateSecretCategoryId, out DiscordChannel secCat);
            DateSecretCategory = secCat;

            //DebugLogWrite("Initiating voice channels... ");
            //VoiceChannels
            DateVoiceLobbies.Clear();
            SecretRooms.Clear();
            DateVoiceLobbies.AddRange(GetVoiceLobbies());
            SecretRooms.AddRange(GetSecretRooms());
            await VoiceChannelsInitAsync().ConfigureAwait(false);

            if (DateVoiceLobbies.Count == 0 || DateVoiceLobbies.All(c => c.Users.Count() > 0))
            {
                await AddLastEmptyVoiceLobby().ConfigureAwait(false);
            }

            //DebugLogWrite("Initiating Emojis... ");
            //GetEmojis
            MaleEmoji   = DiscordEmoji.FromUnicode(DateBot.Instance.Client, MaleEmojiId);
            FemaleEmoji = DiscordEmoji.FromUnicode(DateBot.Instance.Client, FemaleEmojiId);
            OptionEmojis.Clear();
            OptionEmojis.AddRange(OptionEmojiIds.Select(id => DiscordEmoji.FromUnicode(DateBot.Instance.Client, id)));
            LikeEmoji       = DiscordEmoji.FromUnicode(DateBot.Instance.Client, LikeEmojiId);
            DisLikeEmoji    = DiscordEmoji.FromUnicode(DateBot.Instance.Client, DisLikeEmojiId);
            TimeEmoji       = DiscordEmoji.FromUnicode(DateBot.Instance.Client, TimeEmojiId);
            CancelLikeEmoji = DiscordEmoji.FromUnicode(DateBot.Instance.Client, CancelLikeEmojiId);

            //DebugLogWrite("Initiating Users in lobbies... ");
            //Check and add users in lobbies
            foreach (var u in UsersInLobbies.ToArray())
            {
                AddOrGetUserState(u).LastEnteredLobbyTime = DateTime.Now;
            }

            //DebugLogWrite("Initiating Welcome message... ");
            //Check for welcome message TODO add option emojis
            DateTextChannel = Guild.GetChannel(DateTextChannelId);
            await WelcomeMessageInit().ConfigureAwait(false);

            _ = PrivateControlsMessageInit().ConfigureAwait(false);

            //UpdateTimer = new Timer(TimeSpan.FromSeconds(30).TotalMilliseconds) { AutoReset = true };
            //UpdateTimer.Elapsed += UpdateTimer_Elapsed;
            //UpdateTimer.Start();

            //DebugLogWrite("finished");
            InitTask    = null;
            Initialized = true;

            if (UsersInLobbies.Count > 0)
            {
                TryStartMatchingTask();
            }
        }