コード例 #1
0
        public static async Task <RegStage> GetStageAsync(Message message)
        {
            var chatId = message.Chat.Id;

            using (TelegramChatContext db = new TelegramChatContext())
            {
                try
                {
                    var secretEvent = await db.Events.FirstOrDefaultAsync(x => x.HostChatId == chatId);

                    if (secretEvent != null)
                    {
                        return(secretEvent.RegistrationStage);
                    }
                }
                catch (Exception e)
                {
                    Debug.WriteLine($"{nameof(Registration)}.{nameof(GetStageAsync)}:{e.Message}");
                    if (e.InnerException != null)
                    {
                        Debug.WriteLine(e.InnerException);
                    }
                }
            }

            return(RegStage.NotStarted);
        }
コード例 #2
0
        public static async Task SetStageAsync(Message message, TelegramBotClient client, RegStage stage)
        {
            var chatId = message.Chat.Id;

            using (TelegramChatContext db = new TelegramChatContext())
            {
                try
                {
                    var secretEvent = await db.Events.FirstOrDefaultAsync(x => x.HostChatId == chatId);

                    if (secretEvent != null)
                    {
                        secretEvent.RegistrationStage = stage;
                        await db.SaveChangesAsync();

                        await ShowStageMessageAsync(message, client, stage);
                    }
                    else
                    {
                        await client.SendTextMessageAsync(chatId, @"You have to start registration using command /register");
                    }
                }
                catch (Exception e)
                {
                    Debug.WriteLine($"{nameof(Registration)}.{nameof(SetStageAsync)}:{e.Message}");
                }
            }
        }
コード例 #3
0
        public static async Task <bool> SetFieldAsync(Message message, RegStage stage)
        {
            var  chatId = message.Chat.Id;
            bool result = false;

            using (TelegramChatContext db = new TelegramChatContext())
            {
                try
                {
                    var secretEvent = await db.Events.FirstOrDefaultAsync(x => x.HostChatId == chatId);

                    if (secretEvent != null)
                    {
                        switch (stage)
                        {
                        case RegStage.SetName:
                            secretEvent.Name = message.Text;
                            result           = true;
                            break;

                        case RegStage.SetDate:
                            secretEvent.Date = message.Text;
                            result           = true;
                            break;

                        case RegStage.SetPlace:
                            secretEvent.Place = message.Text;
                            result            = true;
                            break;

                        case RegStage.SetCount:
                            int count;
                            if (int.TryParse(message.Text, out count))
                            {
                                secretEvent.ParticipantsCount = count;
                                result = true;
                            }

                            break;

                        case RegStage.SetInfo:
                            secretEvent.Info = message.Text;
                            result           = true;
                            break;
                        }

                        await db.SaveChangesAsync();
                    }
                }
                catch (Exception e)
                {
                    Debug.WriteLine($"{nameof(Registration)}.{nameof(SetFieldAsync)}:{e.Message}");
                }
            }

            return(result);
        }
コード例 #4
0
        public override async Task ExecuteAsync(Message message, TelegramBotClient client)
        {
            var chatId = message.Chat.Id;

            await client.SendChatActionAsync(chatId, ChatAction.Typing);

            using (TelegramChatContext db = new TelegramChatContext())
            {
                try
                {
                    var secretEvent = await db.Events.FirstOrDefaultAsync(x => x.HostChatId == chatId);

                    if (secretEvent != null)
                    {
                        var telegramChatsIds = secretEvent.Participants.Select(x => x.Id).ToArray();
                        if (telegramChatsIds.Length >= minimumParticipantsCount)
                        {
                            telegramChatsIds.Shuffle();

                            for (int i = 0; i < telegramChatsIds.Count(); i++)
                            {
                                var chat = secretEvent.Participants.ElementAt(i);
                                chat.GiftUser = secretEvent.Participants.First(x => x.Id == telegramChatsIds[i]);
                            }

                            await client.SendTextMessageAsync(chatId, "The Magic Hat completed its work successfully! Each participant will" +
                                                              " automatically receive a message with the name of the person to whom he is giving the gift.");

                            await MessageDistributor.SendParticipantsMessageAsync(message, client);
                        }
                        else
                        {
                            await client.SendTextMessageAsync(chatId, $"Sorry, to use this command, there must be at least {minimumParticipantsCount} participants.");
                        }
                    }
                    else
                    {
                        await client.SendTextMessageAsync(chatId, @"You have to start registration using command /register.");
                    }
                }
                catch (Exception e)
                {
                    Debug.WriteLine($"{nameof(ShuffleCommand)}:{e.Message}");
                    if (e.InnerException != null)
                    {
                        Debug.WriteLine(e.InnerException);
                    }
                }
            }
        }
コード例 #5
0
        public static async Task SendParticipantsMessageAsync(Message message, TelegramBotClient client)
        {
            var chatId = message.Chat.Id;

            using (TelegramChatContext db = new TelegramChatContext())
            {
                try
                {
                    var secretEvent = await db.Events.FirstOrDefaultAsync(x => x.HostChatId == chatId);

                    if (secretEvent != null)
                    {
                        foreach (var participant in secretEvent.Participants)
                        {
                            var giftUser = participant.GiftUser;

                            var sb = new StringBuilder($"Person to whom you give a gift: {giftUser.FirstName} ");
                            if (!string.IsNullOrEmpty(giftUser.LastName))
                            {
                                sb.Append(giftUser.LastName);
                            }

                            if (!string.IsNullOrEmpty(giftUser.UserName))
                            {
                                sb.Append($"(@{giftUser.UserName})");
                            }

                            await client.SendTextMessageAsync(participant.ChatId, sb.ToString());
                        }
                    }
                    else
                    {
                        await client.SendTextMessageAsync(chatId, @"You have to start registration using command /register");
                    }
                }
                catch (Exception e)
                {
                    Debug.WriteLine($"{nameof(MessageDistributor)}:{e.Message}");
                    if (e.InnerException != null)
                    {
                        Debug.WriteLine(e.InnerException);
                    }
                }
            }
        }
コード例 #6
0
        public override async Task ExecuteAsync(Message message, TelegramBotClient client)
        {
            var chatId = message.Chat.Id;

            await client.SendChatActionAsync(chatId, ChatAction.Typing);

            using (TelegramChatContext db = new TelegramChatContext())
            {
                try
                {
                    var events = db.Events;
                    var _event = await events.FirstOrDefaultAsync(x => x.HostChatId == chatId);

                    if (_event == null)
                    {
                        SecretSantaEvent secretSantaEvent = new SecretSantaEvent(chatId);
                        if (events.Where(x => x.InviteKey.Equals(secretSantaEvent.InviteKey)).Any())
                        {
                            secretSantaEvent.GenerateInviteKey();
                        }

                        db.Events.Add(secretSantaEvent);
                        await db.SaveChangesAsync();

                        await client.SendTextMessageAsync(chatId, "You can fill optional fields or/and generate invitation using command /generate.");
                    }
                    else
                    {
                        await client.SendTextMessageAsync(chatId, "You are already registered. You can fill optional fields or/and generate invitation.");
                    }
                }
                catch (Exception e)
                {
                    Debug.WriteLine($"{nameof(RegisterCommand)}:{e.Message}");
                    if (e.InnerException != null)
                    {
                        Debug.WriteLine(e.InnerException.Message);
                    }
                }
            }

            await Registration.SetStageAsync(message, client, RegStage.SelectOption);

            await RegistrationStatus.Execute(message, client);
        }
コード例 #7
0
        public async override Task ExecuteAsync(Message message, TelegramBotClient client)
        {
            var chatId = message.Chat.Id;

            await client.SendChatActionAsync(chatId, ChatAction.Typing);

            using (TelegramChatContext db = new TelegramChatContext())
            {
                try
                {
                    var events = db.Events;
                    var _event = await events.FirstOrDefaultAsync(x => x.HostChatId == chatId);

                    if (_event != null)
                    {
                        var userList = _event.Participants;

                        if (userList.Count > 0)
                        {
                            db.Users.RemoveRange(userList);
                        }

                        db.Events.Remove(_event);

                        await db.SaveChangesAsync();

                        await client.SendTextMessageAsync(chatId, "Event and participants was successfully removed.");
                    }
                    else
                    {
                        await client.SendTextMessageAsync(chatId, "There is nothing to remove.");
                    }
                }
                catch (Exception e)
                {
                    Debug.WriteLine($"{nameof(RemoveEventCommand)}:{e.Message}");
                    if (e.InnerException != null)
                    {
                        Debug.WriteLine(e.InnerException);
                    }
                }
            }
        }
コード例 #8
0
        public override async Task ExecuteAsync(Message message, TelegramBotClient client)
        {
            var  chatId     = message.Chat.Id;
            bool userExists = false;

            TelegramChat user = new TelegramChat
            {
                ChatId    = chatId,
                FirstName = message.Chat.FirstName,
                LastName  = message.Chat.LastName,
                UserName  = message.Chat.Username
            };

            using (TelegramChatContext db = new TelegramChatContext())
            {
                await client.SendTextMessageAsync(chatId, "Created DB context");

                try
                {
                    /*db.Database.Connection.Open();
                     * await client.SendTextMessageAsync(chatId, "Opened DB connection");*/

                    var users = db.Users;
                    await client.SendTextMessageAsync(chatId, "Get users");

                    foreach (var dbUser in users)
                    {
                        await client.SendTextMessageAsync(chatId, $"Check for user:{dbUser}");

                        if (user.ChatId == dbUser.ChatId)
                        {
                            await client.SendTextMessageAsync(chatId, "Your data already saved in db.");

                            userExists = true;
                            break;
                        }
                    }

                    if (!userExists)
                    {
                        await client.SendTextMessageAsync(chatId, "Try to add user to DB");

                        db.Users.Add(user);
                        await client.SendTextMessageAsync(chatId, "User has been added, trying to save changes");

                        await db.SaveChangesAsync();

                        await client.SendTextMessageAsync(chatId, $"ChatId={user.ChatId} and userName={user.FirstName} added to db.");
                    }
                    else
                    {
                        await client.SendTextMessageAsync(chatId, "User already exists in DB");
                    }
                }
                catch (Exception e)
                {
                    Debug.WriteLine(e.Message);
                }
            }

            await client.SendTextMessageAsync(chatId, "Disposed");
        }
コード例 #9
0
        public static async Task Execute(Message message, TelegramBotClient client)
        {
            var chatId = message.Chat.Id;

            bool userExists = false;

            Regex regex = new Regex(@"^\/start\s(.*)");
            Match match = regex.Match(message.Text);

            if (match.Success)
            {
                string eventKey = match.Groups[1].Value;

                using (TelegramChatContext db = new TelegramChatContext())
                {
                    try
                    {
                        var events = db.Events;
                        var _event = await events.FirstOrDefaultAsync(x => x.InviteKey == eventKey);

                        TelegramChat user = new TelegramChat
                        {
                            ChatId    = chatId,
                            FirstName = message.Chat.FirstName,
                            LastName  = message.Chat.LastName,
                            UserName  = message.Chat.Username,
                        };

                        foreach (var eventUser in _event.Participants)
                        {
                            if (eventUser.ChatId == user.ChatId)
                            {
                                userExists = true;
                                break;
                            }
                        }

                        if (!userExists)
                        {
                            _event.Participants.Add(user);
                            await db.SaveChangesAsync();

                            await client.SendTextMessageAsync(chatId, $"Congratulations! You are registered to event!");

                            //await client.SendTextMessageAsync(chatId, $"Now you can add wishlist using next syntax: /addWish Type your wish here");
                            //await client.SendTextMessageAsync(chatId, $"To clear wish list use command /clearWishList");
                            //await client.SendTextMessageAsync(chatId, $"To show wish list use command /showWishList");
                            await client.SendTextMessageAsync(chatId, $"When the event organizer closes the registration, " +
                                                              $"I will send you a message with a random participant to whom you will give a gift.");
                        }
                        else
                        {
                            await client.SendTextMessageAsync(chatId, "You don't need to register to this event again.");
                        }
                    }
                    catch (Exception e)
                    {
                        Debug.WriteLine($"{nameof(UserStart)}:{e.Message}");
                    }
                }
            }
            else
            {
                await client.SendTextMessageAsync(chatId, "Ooops, something wrong with your link or such event is not exists.");
            }
        }
コード例 #10
0
        public override async Task ExecuteAsync(Message message, TelegramBotClient client)
        {
            var chatId = message.Chat.Id;

            string status = @"Hello\!👋" + Environment.NewLine;

            await client.SendChatActionAsync(chatId, ChatAction.Typing);

            using (TelegramChatContext db = new TelegramChatContext())
            {
                try
                {
                    var secretEvent = await db.Events.FirstOrDefaultAsync(x => x.HostChatId == chatId);

                    if (secretEvent != null)
                    {
                        if (!string.IsNullOrWhiteSpace(secretEvent.Name))
                        {
                            status += string.Format(statusName, secretEvent.Name);
                        }
                        else
                        {
                            status += string.Format(statusName, "Secret Santa");
                        }

                        if (!string.IsNullOrWhiteSpace(secretEvent.Date))
                        {
                            status += string.Format(statusDate, secretEvent.Date);
                        }

                        if (!string.IsNullOrWhiteSpace(secretEvent.Place))
                        {
                            status += string.Format(statusPlace, secretEvent.Place);
                        }

                        if (!string.IsNullOrWhiteSpace(secretEvent.ParticipantsCount.ToString()))
                        {
                            if (secretEvent.ParticipantsCount > 0)
                            {
                                status += string.Format(statusCount, secretEvent.ParticipantsCount);
                            }
                        }

                        if (!string.IsNullOrWhiteSpace(secretEvent.Info))
                        {
                            status += string.Format(statusInfo, secretEvent.Info);
                        }

                        status += string.Format(statusLink, secretEvent.InviteKey);

                        await client.SendTextMessageAsync(chatId, "Forward the next message to participants");

                        await client.SendTextMessageAsync(chatId, status, ParseMode.MarkdownV2);

                        await client.SendTextMessageAsync(chatId, "When all participants are accepted their invitations (you can check it by command /status), use command /shuffle to shuffle participants list.");
                    }
                    else
                    {
                        await client.SendTextMessageAsync(chatId, "You have to start registration using command /register");
                    }
                }
                catch (Exception e)
                {
                    Debug.WriteLine($"{nameof(GenerateCommand)}:{e.Message}");
                }
            }
        }