Пример #1
0
        private void HandleCbqStatus(QueryCallbackEventArgs e)
        {
            var woorden = GetVerbodenWoordCollection().Find(x => x.OwnerUserId == e.CallbackQuery.From.ID).OrderBy(x => x.CreationDate).ToList();

            _log.Info($"Returning status for {woorden.Count} words for for user {e.CallbackQuery.From.DisplayName()}");
            if (woorden.Count > 0)
            {
                StringBuilder status = new StringBuilder();
                status.AppendLine($"<b>Status van jouw woorden (oudste eerst):</b>");
                foreach (var woord in woorden.OrderBy(w => w.CreationDate))
                {
                    status.AppendLine($"");
                    status.AppendLine($"<b>Sinds:</b> {TimeService.AsReadableTimespan(DateTime.UtcNow - woord.CreationDate)}");
                    status.AppendLine($"<b>Woorden ({woord.Woorden.Count}):</b>");
                    foreach (var w in woord.Woorden)
                    {
                        status.AppendLine($" - {MessageUtils.HtmlEscape(w)}");
                    }
                }
                Client.SendMessageToChat(e.CallbackQuery.From.ID, status.ToString(), "HTML");
                Client.SendMessageToChat(e.CallbackQuery.From.ID, $"Je hebt in totaal {woorden.Count} woord(en) ingesteld, de oudste staat al {TimeService.AsReadableTimespan(DateTime.UtcNow - woorden.First().CreationDate)}", "HTML", null, null, null, CreateBackKeyboardMarkup(e.CallbackQuery.From));
            }
            else
            {
                Client.SendMessageToChat(e.CallbackQuery.From.ID, $"🎶 <i>Er zijn geen woorden meer, geen woorden meer, voor jou.</i>", "HTML", null, null, null, CreateBackKeyboardMarkup(e.CallbackQuery.From));
            }
        }
Пример #2
0
        private void Client_OnQueryCallback(object sender, QueryCallbackEventArgs e)
        {
            string query = e.CallbackQuery.Data.Split(':').FirstOrDefault();

            switch (query)
            {
            case CbqBack:
                Client.AnswerCallbackQuery(e.CallbackQuery.ID);
                ResetConversation(e.CallbackQuery.From);
                ShowMainMenu(e.CallbackQuery.From);
                break;

            case CbqDeleteWoord:
                Client.AnswerCallbackQuery(e.CallbackQuery.ID);
                HandleCbqDeleteWoord(e);
                ResetConversation(e.CallbackQuery.From);
                ShowMainMenu(e.CallbackQuery.From);
                break;

            case CbqStatus:
                Client.AnswerCallbackQuery(e.CallbackQuery.ID);
                HandleCbqStatus(e);
                ResetConversation(e.CallbackQuery.From);
                break;

            case CbqAddWord:
                Client.AnswerCallbackQuery(e.CallbackQuery.ID);
                HandleCbqAddWord(e);
                break;
            }
        }
 private void ProcessRaidDone(QueryCallbackEventArgs e)
 {
     GetOrCreateRaidDescriptionForUser(e.CallbackQuery.From, out DbSet <RaidDescription> collection, out RaidDescription record);
     if (string.IsNullOrWhiteSpace(record.Raid))
     {
         Client.SendMessageToChat(e.CallbackQuery.From.ID, _HTML_(I18N.GetString("Please specify which Pokémon the raid is for. If unknown, just enter the level of the raid.")));
         ShowMenu(e.CallbackQuery.From);
     }
     else if (string.IsNullOrWhiteSpace(record.Gym))
     {
         Client.SendMessageToChat(e.CallbackQuery.From.ID, _HTML_(I18N.GetString("Please specify the name of the gym.")));
         ShowMenu(e.CallbackQuery.From);
     }
     else if (null == record.Location)
     {
         Client.SendMessageToChat(e.CallbackQuery.From.ID, _HTML_(I18N.GetString("Please specify the gym's location. You can send a location from the telegram mobile client by pressing the paperclip button and selecting Location. Then drag the map so the position marker is at the location of the gym. The address information will automatically be added by the bot.")));
         ShowMenu(e.CallbackQuery.From);
     }
     else if (record.RaidEndTime == default(DateTime) || record.RaidEndTime <= DateTime.UtcNow)
     {
         Client.SendMessageToChat(e.CallbackQuery.From.ID, _HTML_(I18N.GetString("Please specify when the raid will take place.")));
         ShowMenu(e.CallbackQuery.From);
     }
     else
     {
         _eventHandler.CreateAndSharePrivately(e.CallbackQuery.From, record);
         ResetConversation(e.CallbackQuery.From);
     }
 }
Пример #4
0
        private void HandleCbqDeleteWoord(QueryCallbackEventArgs e)
        {
            var    collection = GetVerbodenWoordCollection();
            var    args       = e.CallbackQuery.Data.Split(':').Skip(1).ToList();
            string id         = args[0];
            int    deleted    = collection.Delete(x => x.OwnerUserId == e.CallbackQuery.From.ID && x.ID == id);

            if (deleted > 0)
            {
                _publicChatModules.ForEach(x => x.OnWordsChanged());
            }

            _log.Info($"Deleted {deleted} words with id {id} for user {e.CallbackQuery.From.DisplayName()}");
        }
        /// <summary>
        /// Deals with the QrJoin command (user plans to join the raid).
        /// </summary>
        /// <param name="commandArgs"></param>
        private void HandleJoin(IReadOnlyList <string> commandArgs, QueryCallbackEventArgs queryCallbackEventArgs)
        {
            // Args: raid:[extra]:[team]:[UserParticipationType (as int)]
            string raidID = commandArgs[0];

            this._log.Trace(
                $"{queryCallbackEventArgs.CallbackQuery.From.DisplayName()} will join raid {raidID} [{queryCallbackEventArgs.CallbackQuery.Data}]");

            if (commandArgs.Count >= 3 && int.TryParse(commandArgs[2], out int teamID) && teamID >= (int)Team.Unknown && teamID <= (int)Team.Instinct)
            {
                _log.Trace($"{queryCallbackEventArgs.CallbackQuery.From.DisplayName()} joined team {((Team)teamID).AsReadableString()}");

                string joinedForTeamMessage = this._HTML_(I18N.GetString("Joined for team {0}", _HTML_(((Team)teamID).AsReadableString())));

                Client.AnswerCallbackQuery(queryCallbackEventArgs.CallbackQuery.ID, joinedForTeamMessage);
                this.UpdateUserSettingsForTeam(queryCallbackEventArgs.CallbackQuery.From, (Team)teamID);
            }
            else
            {
                Client.AnswerCallbackQuery(queryCallbackEventArgs.CallbackQuery.ID, this._HTML_(I18N.GetString("You're on the list now.")));
            }

            // Because we updated the user settings first, the user will automatically be added or moved to the
            // correct team by the join function.
            this.UpdateUserRaidJoinOrUpdateAttendance(queryCallbackEventArgs.CallbackQuery.From, raidID);

            // Determine the user's participation type for this here raid.
            const int userParticipationTypeArgumentIndex = 3;

            if (commandArgs.Count > userParticipationTypeArgumentIndex &&
                Enum.TryParse <UserParticipationType>(commandArgs[userParticipationTypeArgumentIndex], out UserParticipationType parsedUserParticipationType) &&
                Enum.IsDefined(typeof(UserParticipationType), parsedUserParticipationType))
            {
                this.UpdateUserRaidParticipationType(queryCallbackEventArgs.CallbackQuery.From, raidID, parsedUserParticipationType);
            }

            const int extraArgumentIndex = 1;

            // If an extra number of attendees was passed, have that updated too.
            if (commandArgs.Count > extraArgumentIndex && Int32.TryParse(commandArgs[extraArgumentIndex], out int extra) && extra >= 0)
            {
                this.UpdateUserRaidExtra(queryCallbackEventArgs.CallbackQuery.From, raidID, extra);
            }

            this.RequestUpdateRaidMessage(queryCallbackEventArgs.CallbackQuery.Message?.Chat?.ID,
                                          queryCallbackEventArgs.CallbackQuery.Message?.MessageID, queryCallbackEventArgs.CallbackQuery.InlineMessageId,
                                          commandArgs[0], queryCallbackEventArgs.CallbackQuery.Message?.Chat?.Type);
        }
        private void Client_OnQueryCallback(object sender, QueryCallbackEventArgs e)
        {
            string command = e.CallbackQuery.Data.Split(':').FirstOrDefault();

            string[] args = e.CallbackQuery.Data.Split(':').Skip(1).ToArray();
            switch (command)
            {
            case QrArrived:     // :raid
                _log.Trace($"{e.CallbackQuery.From.DisplayName()} has arrived for raid {args[0]}");
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Excellent! You arrived.")));
                UpdateUserRaidJoinOrUpdateAttendance(e.CallbackQuery.From, args[0]);
                UpdateUserRaidArrived(e.CallbackQuery.From, args[0]);
                RequestUpdateRaidMessage(e.CallbackQuery.Message?.Chat?.ID, e.CallbackQuery.Message?.MessageID, e.CallbackQuery.InlineMessageId, args[0], e.CallbackQuery.Message?.Chat?.Type);
                break;

            case QrDecline:     // :raid
                _log.Trace($"{e.CallbackQuery.From.DisplayName()} has declined for raid {args[0]}");
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("That's too bad 😞")));
                UpdateUserRaidNegative(e.CallbackQuery.From, args[0]);
                RequestUpdateRaidMessage(e.CallbackQuery.Message?.Chat?.ID, e.CallbackQuery.Message?.MessageID, e.CallbackQuery.InlineMessageId, args[0], e.CallbackQuery.Message?.Chat?.Type);
                break;

            case QrJoin:
                this.HandleJoin(args, e);

                break;

            case QrPublish:     // :raid
                _log.Info($"{e.CallbackQuery.From.DisplayName()} published raid {args[0]}");
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Publishing the raid.")));
                PublishRaid(e.CallbackQuery.From, args[0]);
                RequestUpdateRaidMessage(e.CallbackQuery.Message?.Chat?.ID, e.CallbackQuery.Message?.MessageID, e.CallbackQuery.InlineMessageId, args[0], e.CallbackQuery.Message?.Chat?.Type);
                break;

            case QrRefresh:     // :raid
                _log.Trace($"{e.CallbackQuery.From.DisplayName()} refreshed {args[0]}");
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Refreshing...")));
                RequestUpdateRaidMessage(e.CallbackQuery.Message?.Chat?.ID, e.CallbackQuery.Message?.MessageID, e.CallbackQuery.InlineMessageId, args[0], e.CallbackQuery.Message?.Chat?.Type);
                break;

            case QrSetTime:     // :raid:ticks
                UpdateUserRaidJoinOrUpdateAttendance(e.CallbackQuery.From, args[0]);
                if (long.TryParse(args[1], out long ticks))
                {
                    var utcWhen = new DateTime(ticks, DateTimeKind.Utc);
                    _log.Trace($"{e.CallbackQuery.From.DisplayName()} updated their time for raid {args[0]} to {TimeService.AsShortTime(utcWhen)}");
                    Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("You will be there at {0}.", TimeService.AsShortTime(utcWhen))));
                    UpdateUserRaidTime(e.CallbackQuery.From, args[0], utcWhen);
                }
                else
                {
                    Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Error updating time.")));
                }
                RequestUpdateRaidMessage(e.CallbackQuery.Message?.Chat?.ID, e.CallbackQuery.Message?.MessageID, e.CallbackQuery.InlineMessageId, args[0], e.CallbackQuery.Message?.Chat?.Type);
                break;

            case QrEdit:     // :{raid}
                _log.Info($"{e.CallbackQuery.From.DisplayName()} wants to edit raid {args[0]}");
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Go to our private chat to edit the raid.")));
                RaidEditor.EditRaid(e.CallbackQuery.From, args[0]);
                break;

            case QrDone:     // :raid
                _log.Trace($"{e.CallbackQuery.From.DisplayName()} has done raid {args[0]}");
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Registered. Thanks.")));
                UpdateUserRaidDone(e.CallbackQuery.From, args[0]);
                RequestUpdateRaidMessage(e.CallbackQuery.Message?.Chat?.ID, e.CallbackQuery.Message?.MessageID, e.CallbackQuery.InlineMessageId, args[0], e.CallbackQuery.Message?.Chat?.Type);
                break;

            case QrMaybe:     // :raid
                _log.Trace($"{e.CallbackQuery.From.DisplayName()} has answered 'maybe' for {args[0]}");
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Registered. Thanks.")));
                UpdateUserRaidMaybe(e.CallbackQuery.From, args[0]);
                RequestUpdateRaidMessage(e.CallbackQuery.Message?.Chat?.ID, e.CallbackQuery.Message?.MessageID, e.CallbackQuery.InlineMessageId, args[0], e.CallbackQuery.Message?.Chat?.Type);
                break;
            }
        }
Пример #7
0
        private void Client_OnQueryCallback(object sender, QueryCallbackEventArgs e)
        {
            string command = e.CallbackQuery.Data.Split(':').FirstOrDefault();

            string[] args = e.CallbackQuery.Data.Split(':').Skip(1).ToArray();
            switch (command)
            {
            case QrArrived:     // :raid
                _log.Trace($"{e.CallbackQuery.From.DisplayName()} has arrived for raid {args[0]}");
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Excellent! You arrived.")));
                UpdateUserRaidJoinOrUpdateAttendance(e.CallbackQuery.From, args[0]);
                UpdateUserRaidArrived(e.CallbackQuery.From, args[0]);
                RequestUpdateRaidMessage(e.CallbackQuery.Message?.Chat?.ID, e.CallbackQuery.Message?.MessageID, e.CallbackQuery.InlineMessageId, args[0], e.CallbackQuery.Message?.Chat?.Type);
                break;

            case QrDecline:     // :raid
                _log.Trace($"{e.CallbackQuery.From.DisplayName()} has declined for raid {args[0]}");
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("That's too bad 😞")));
                UpdateUserRaidNegative(e.CallbackQuery.From, args[0]);
                RequestUpdateRaidMessage(e.CallbackQuery.Message?.Chat?.ID, e.CallbackQuery.Message?.MessageID, e.CallbackQuery.InlineMessageId, args[0], e.CallbackQuery.Message?.Chat?.Type);
                break;

            case QrJoin:     // :raid:extra:team
                _log.Trace($"{e.CallbackQuery.From.DisplayName()} will join raid {args[0]} [{e.CallbackQuery.Data}]");
                if (args.Length >= 3 && int.TryParse(args[2], out int teamID) && teamID >= (int)Team.Unknown && teamID <= (int)Team.Instinct)
                {
                    _log.Trace($"{e.CallbackQuery.From.DisplayName()} joined team {((Team)teamID).AsReadableString()}");
                    Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Joined for team {0}", _HTML_(((Team)teamID).AsReadableString()))));
                    UpdateUserSettingsForTeam(e.CallbackQuery.From, (Team)teamID);
                }
                else
                {
                    Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("You're on the list now.")));
                }
                // Because we updated the user settings first, the user will automatically be added or moved to the
                // correct team by the join function.
                UpdateUserRaidJoinOrUpdateAttendance(e.CallbackQuery.From, args[0]);
                if (args.Length >= 2 && int.TryParse(args[1], out int extra) && extra >= 0)
                {
                    UpdateUserRaidExtra(e.CallbackQuery.From, args[0], extra);
                }
                RequestUpdateRaidMessage(e.CallbackQuery.Message?.Chat?.ID, e.CallbackQuery.Message?.MessageID, e.CallbackQuery.InlineMessageId, args[0], e.CallbackQuery.Message?.Chat?.Type);
                break;

            case QrPublish:     // :raid
                _log.Info($"{e.CallbackQuery.From.DisplayName()} published raid {args[0]}");
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Publishing the raid.")));
                PublishRaid(e.CallbackQuery.From, args[0]);
                RequestUpdateRaidMessage(e.CallbackQuery.Message?.Chat?.ID, e.CallbackQuery.Message?.MessageID, e.CallbackQuery.InlineMessageId, args[0], e.CallbackQuery.Message?.Chat?.Type);
                break;

            case QrRefresh:     // :raid
                _log.Trace($"{e.CallbackQuery.From.DisplayName()} refreshed {args[0]}");
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Refreshing...")));
                RequestUpdateRaidMessage(e.CallbackQuery.Message?.Chat?.ID, e.CallbackQuery.Message?.MessageID, e.CallbackQuery.InlineMessageId, args[0], e.CallbackQuery.Message?.Chat?.Type);
                break;

            case QrSetTime:     // :raid:ticks
                UpdateUserRaidJoinOrUpdateAttendance(e.CallbackQuery.From, args[0]);
                if (long.TryParse(args[1], out long ticks))
                {
                    var utcWhen = new DateTime(ticks);
                    _log.Trace($"{e.CallbackQuery.From.DisplayName()} updated their time for raid {args[0]} to {TimeService.AsShortTime(utcWhen)}");
                    Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("You will be there at {0}.", TimeService.AsShortTime(utcWhen))));
                    UpdateUserRaidTime(e.CallbackQuery.From, args[0], utcWhen);
                }
                else
                {
                    Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Error updating time.")));
                }
                RequestUpdateRaidMessage(e.CallbackQuery.Message?.Chat?.ID, e.CallbackQuery.Message?.MessageID, e.CallbackQuery.InlineMessageId, args[0], e.CallbackQuery.Message?.Chat?.Type);
                break;

            case QrEdit:     // :{raid}
                _log.Info($"{e.CallbackQuery.From.DisplayName()} wants to edit raid {args[0]}");
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Go to our private chat to edit the raid.")));
                RaidEditor.EditRaid(e.CallbackQuery.From, args[0]);
                break;

            case QrDone:     // :raid
                _log.Trace($"{e.CallbackQuery.From.DisplayName()} has done raid {args[0]}");
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Registered. Thanks.")));
                UpdateUserRaidDone(e.CallbackQuery.From, args[0]);
                RequestUpdateRaidMessage(e.CallbackQuery.Message?.Chat?.ID, e.CallbackQuery.Message?.MessageID, e.CallbackQuery.InlineMessageId, args[0], e.CallbackQuery.Message?.Chat?.Type);
                break;

            case QrMaybe:     // :raid
                _log.Trace($"{e.CallbackQuery.From.DisplayName()} has answered 'maybe' for {args[0]}");
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Registered. Thanks.")));
                UpdateUserRaidMaybe(e.CallbackQuery.From, args[0]);
                RequestUpdateRaidMessage(e.CallbackQuery.Message?.Chat?.ID, e.CallbackQuery.Message?.MessageID, e.CallbackQuery.InlineMessageId, args[0], e.CallbackQuery.Message?.Chat?.Type);
                break;
            }
        }
Пример #8
0
        private void HandleCbqAddWord(QueryCallbackEventArgs e)
        {
            var user = e.CallbackQuery.From;

            RequestWordFromUser(user);
        }
        private void Client_OnQueryCallback(object sender, QueryCallbackEventArgs e)
        {
            string query = e.CallbackQuery.Data.Split(':').FirstOrDefault();

            switch (query)
            {
            case CbqGym:
                Client.AnswerCallbackQuery(e.CallbackQuery.ID);
                ConversationManager.SetState(e.CallbackQuery.From, StateReadGym);
                Client.SendMessageToChat(e.CallbackQuery.From.ID, _HTML_(I18N.GetString("Enter the name of the gym.")));
                break;

            case CbqRaid:
                Client.AnswerCallbackQuery(e.CallbackQuery.ID);
                ConversationManager.SetState(e.CallbackQuery.From, StateReadPokemon);
                Client.SendMessageToChat(e.CallbackQuery.From.ID, _HTML_(I18N.GetString("Enter the name of the Pokémon.")));
                break;

            case CbqAlignment:
                Client.AnswerCallbackQuery(e.CallbackQuery.ID);
                Client.SendMessageToChat(e.CallbackQuery.From.ID, _HTML_(I18N.GetString("Specify the current gym's alignment.")), "HTML", true, true, null, CreateAlignmentMenu());
                break;

            case CbqAlignmentSelected:
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Updated the gym alignment.")));
                var newValue = int.Parse(e.CallbackQuery.Data.Split(':')[1]);
                UpdateAlignment(e.CallbackQuery.From, (Team)newValue);
                ShowMenu(e.CallbackQuery.From);
                break;

            case CbqTime:
                Client.AnswerCallbackQuery(e.CallbackQuery.ID);
                Client.SendMessageToChat(e.CallbackQuery.From.ID, _HTML_(I18N.GetString("Please specify when the raid will take place. If the egg is yet to hatch, use one of the 🥚 buttons to indicate the amount of time left before the egg hatches. If the egg already hatched use one of the ⛔️ to indicate how many minutes are left for the raid.")), "HTML", true, true, null, CreateTimeMenu());
                break;

            case CbqTimeSelected:
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Raid time updated.")));
                var minutesUntilRaidEnd = int.Parse(e.CallbackQuery.Data.Split(':')[1]);
                UpdateTime(e.CallbackQuery.From, minutesUntilRaidEnd);
                ShowMenu(e.CallbackQuery.From);
                break;

            case CbqManuallyEnterStartTime:
                Client.AnswerCallbackQuery(e.CallbackQuery.ID);
                Client.SendMessageToChat(e.CallbackQuery.From.ID, _HTML_(I18N.GetString("Select a date for this raid from the list below.")), "HTML", true, true, null, CreateDateMenu());
                break;

            case CbqOtherDateSelected:
                Client.AnswerCallbackQuery(e.CallbackQuery.ID);
                Client.SendMessageToChat(e.CallbackQuery.From.ID, _HTML_(I18N.GetString("Select a start time.")), "HTML", true, true, null, CreateTimeMenu(int.Parse(e.CallbackQuery.Data.Split(':')[1])));
                break;

            case CbqOtherDateTimeSelected:
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Raid time updated.")));
                var args = e.CallbackQuery.Data.Split(':');
                UpdateTime(e.CallbackQuery.From, int.Parse(args[1]), int.Parse(args[2]), int.Parse(args[3]));
                ShowMenu(e.CallbackQuery.From);
                break;

            case CbqClear:
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Cleared.")));
                ResetConversation(e.CallbackQuery.From);
                ShowMenu(e.CallbackQuery.From);
                break;

            case CbqDone:
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("The raid was created but not published yet. You can publish or share the raid with the corresponding buttons in the block.")));
                ProcessRaidDone(e);
                break;

            case CbqPlayerTeamSelected:
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("If you say so.")));
                DbSet <UserSettings> userSettingsCollection = DB.GetCollection <UserSettings>();
                var userSettings = UserSettings.GetOrCreateUserSettings(e.CallbackQuery.From, userSettingsCollection);
                var team         = (Team)(int.Parse(e.CallbackQuery.Data.Split(':')[1]));
                userSettings.Team = team;
                userSettingsCollection.Update(userSettings);
                string msg = I18N.GetString("Your new team is {0}.", _HTML_(team.AsReadableString()));
                Client.SendMessageToChat(e.CallbackQuery.From.ID, msg, "HTML", true, true);
                break;
            }
        }
Пример #10
0
        private void Client_OnQueryCallback(object sender, QueryCallbackEventArgs e)
        {
            string command = e.CallbackQuery.Data.Split(':').FirstOrDefault();

            string[] args = e.CallbackQuery.Data.Split(':').Skip(1).ToArray();
            switch (command)
            {
            case QrEditLocation:
                ConversationManager.SetState(e.CallbackQuery.From, StateExpectLocation, args);
                Client.AnswerCallbackQuery(e.CallbackQuery.ID);
                Client.SendMessageToChat(e.CallbackQuery.From.ID, I18N.GetString("Please send me a location using the attach-button in your messaging client."));
                break;

            case QrEditGym:
                ConversationManager.SetState(e.CallbackQuery.From, StateExpectGym, args);
                Client.AnswerCallbackQuery(e.CallbackQuery.ID);
                Client.SendMessageToChat(e.CallbackQuery.From.ID, I18N.GetString("Please send me the updated name of the gym."));
                break;

            case QrEditPokemon:
                ConversationManager.SetState(e.CallbackQuery.From, StateExpectPokemon, args);
                Client.AnswerCallbackQuery(e.CallbackQuery.ID);
                Client.SendMessageToChat(e.CallbackQuery.From.ID, I18N.GetString("Please send me the updated name of the Pokémon."));
                break;

            case QrEditRemarks:
                ConversationManager.SetState(e.CallbackQuery.From, StateExpectRemarks, args);
                Client.AnswerCallbackQuery(e.CallbackQuery.ID);
                Client.SendMessageToChat(e.CallbackQuery.From.ID, I18N.GetString("Please send me a line of text to add as remarks to the raid."));
                break;

            case QrEditTime:
                ConversationManager.SetState(e.CallbackQuery.From, StateExpectTime, args);
                Client.AnswerCallbackQuery(e.CallbackQuery.ID);
                Client.SendMessageToChat(e.CallbackQuery.From.ID, I18N.GetString("Enter the exact time that the egg with hatch in the form HH:MM using a 24-hour clock."));
                break;

            case QrEditAlignment:
                ConversationManager.SetState(e.CallbackQuery.From, null);
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, I18N.GetString("Select the new gym alignment from the menu"));
                Client.SendMessageToChat(e.CallbackQuery.From.ID, I18N.GetString("Select the new gym alignment from the menu."), "HTML", true, true, null, CreateAlignmentMenu(args[0]));
                break;

            case QrAlignmentSelected:     // :{raid}:{alignment}
                var team = (Team)Int32.Parse(args[1]);
                _log.Info($"{e.CallbackQuery.From.DisplayName()} changed the gym alignment for {args[0]} to {team}");
                Client.EditMessageText($"{e.CallbackQuery.Message.Chat.ID}", e.CallbackQuery.Message.MessageID, null, _HTML_(I18N.GetString("Updated the gym alignment. Manual refresh of the published raid is required.")));
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Thanks. Now please manually refresh the published message.")));
                UpdateGymAlignment(e.CallbackQuery.From, args[0], team);
                break;

            case QrUnpublish:
                DoForPublicRaid(args[0], (raidCollection, raid) =>
                {
                    if (raid.IsPublished)
                    {
                        raid.IsPublished = false;
                        if (raid.Raid.TelegramMessageID.HasValue)
                        {
                            var channelID = Settings.PublicationChannel.Value;
                            Client.DeleteMessage(channelID, raid.Raid.TelegramMessageID.Value);
                            raid.Raid.TelegramMessageID = null;
                            raid.LastModificationTime   = DateTime.UtcNow;
                            raidCollection.Update(raid);
                            Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Publication of this raid has been undone. You may publish the raid again at your discretion.")));
                        }
                    }
                    else
                    {
                        Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("This raid is not published (anymore). You may publish the raid again.")));
                    }
                    EditRaid(e.CallbackQuery.From, args[0]);
                });
                break;

            case QrRefresh:
                Client.AnswerCallbackQuery(e.CallbackQuery.ID, _HTML_(I18N.GetString("Refreshing...")));
                EditRaid(e.CallbackQuery.From, args[0]);
                break;

            default:
                break;
            }
        }