public async Task ProcessTransaction(object transaction, ITelegramBotClient botClient, ILogger logger, IDbContext db) { var currentTransaction = transaction as FeedbackTransactionModel; await botClient.ForwardMessageAsync(new ChatId(Constants.FeedbackChannelId), currentTransaction.Message.From.Id, currentTransaction.Message.MessageId); (transaction as BaseTransactionModel).IsComplete = true; return; }
public override async Task Execute(BunkerUser user, ITelegramBotClient client) { Room room = Program.rooms.GetRoomByPlayer(user); int size = room.Players.Count; if (size == 1) { Program.SendMessage(user, "You must have at least 2 players to start a poll!"); } else { string[] options = new string[size]; for (int i = 0; i < size; i++) { options[i] = $"{room.Players[i].NickName}"; } var pollInt = await client.SendPollAsync(room.Players[0].ChatID, "Whom to quit", options); for (int i = 1; i < size; i++) { await client.ForwardMessageAsync(room.Players[i].ChatID, pollInt.Chat.Id, pollInt.MessageId); } await Task.Delay(20000); var stoppedPoll = await client.StopPollAsync(pollInt.Chat.Id, pollInt.MessageId); int max = 0; string name = ""; foreach (PollOption option in stoppedPoll.Options) { if (option.VoterCount > max) { max = option.VoterCount; name = option.Text; } } BunkerUser player = room.GetPlayerByName(name); room.RemovePlayer(player); } }
private async Task <bool> IsRepostedMessageDeletedInChat(RepostedMessage repostedMessage) { var technicalChatId = _settings.TechnicalChatId; var result = true; try { var forwarded = await _telegram.ForwardMessageAsync( technicalChatId, repostedMessage.From.ChatId, repostedMessage.From.MessageId, true); result = false; await _telegram.DeleteMessageAsync(forwarded.Chat.Id, forwarded.MessageId); } catch (Exception exception) when(exception.Message == "Bad Request: message to forward not found") { var e = exception; } return(result); }
private async Task <bool> IsRepostedMessageDeletedInChat(RepostedMessage repostedMessage) { // Again, can't change it without debugging, probably checking message existence is enough var technicalChatId = _settings.TechnicalChatId; try { var forwarded = await _telegram.ForwardMessageAsync( technicalChatId, repostedMessage.From.ChatId, repostedMessage.From.MessageId, true); await _telegram.DeleteMessageAsync(forwarded.Chat.Id, forwarded.MessageId); return(false); } catch (Exception exception) when(exception.Message == "Bad Request: message to forward not found") { var e = exception; } return(true); }
static async void Bot_OnMessage(object sender, MessageEventArgs e) { var user = e.Message.From; var chat = e.Message.Chat; User localUser; if (chat.Id == 484323184) { SendMessage(chat, "пошел нахуй дима"); return; } if (DBHandler.ContainsUser(user.Id)) { localUser = DBHandler.GetUserById(user.Id); } else { localUser = new User(user.Id, user.Username, user.FirstName, user.LastName); localUser = DBHandler.AddNewUser(localUser); Logger.Log($"Created new user {user.Username}"); } switch (e.Message.Type) { case MessageType.Photo: Logger.Log($"{user} sent a photo message"); Logger.Log($"Forwarding to bot owner, id - {ownerChatId}"); await BotClient.ForwardMessageAsync(ownerChatId, chat, e.Message.MessageId); SendMessage(chat, "Принято ;)"); break; case MessageType.Video: Logger.Log($"{user} sent a video message"); Logger.Log($"Forwarding to bot owner, id - {ownerChatId}"); await BotClient.ForwardMessageAsync(ownerChatId, chat, e.Message.MessageId); SendMessage(chat, "Принято ;)"); break; case MessageType.Voice: Logger.Log($"{user} sent a voice message"); Logger.Log($"Forwarding to bot owner, id - {ownerChatId}"); await BotClient.ForwardMessageAsync(ownerChatId, chat, e.Message.MessageId); SendMessage(chat, "Принято ;)"); break; case MessageType.VideoNote: Logger.Log($"{user} sent a video note message"); Logger.Log($"Forwarding to bot owner, id - {ownerChatId}"); await BotClient.ForwardMessageAsync(ownerChatId, chat, e.Message.MessageId); SendMessage(chat, "Принято ;)"); break; case MessageType.Text: Logger.Log( $"{user} sent a text message"); Logger.Log(e.Message.Text); string textToSend; if (MesWaitList != null) { if (MesWaitList.Contains(user)) { Logger.Log($"{user} listed in message wait list"); if (e.Message.Text == "/cancel") { Logger.Log($"{user} sent /cancel so aborting operation"); MesWaitList.Remove(user); textToSend = "Отправка сообщения Вашему Тайному Санте отменена"; SendMessage(chat, textToSend); } else { var santaId = DBHandler.findSantaId(user); if (santaId == 0) { Logger.Log("Error: santa ID didnt found"); return; } Logger.Log($"{user} Santa ID found - {santaId}, forwarding message to him"); SendMessage(santaId, "Вам сообщение от Вашей цели:"); await BotClient.ForwardMessageAsync(santaId, chat, e.Message.MessageId); textToSend = "Ваше сообщение успешно переслано!"; SendMessage(chat, textToSend); MesWaitList.Remove(user); } } } switch (e.Message.Text) { case "/start": SendIntroMessages(chat, user); await Task.Delay(TimeSpan.FromSeconds(4)); SendMemo(chat, user); if (IsInSecondStage) { textToSend = "К сожалению регистрация уже закрыта"; SendMessage(chat, textToSend); } else { switch (localUser.State) { case States.NewUser: textToSend = "Чтобы начать регистрацию отправьте команду /start_registration"; SendMessage(chat, textToSend); break; case States.RegistrationStarted: AskProfileQuestion(chat, user, localUser); break; } } break; case "/send_memo": SendMemo(chat, user); break; case "/send_my_profile": SendUserProfile(chat, localUser, user); break; case "/send_target_profile": Logger.Log($"{user} asked for target profile"); if (IsInSecondStage) { if (localUser.State == States.TargetChosen || localUser.State == States.TargetSent) { SendTargetProfile(chat, localUser, DBHandler.GetUserById(localUser.TargetId)); } else { Logger.Log( $"{user} asked for target profile but he has no target, sending info message"); SendMessage(chat, "Извините, Вам не назначена цель, если Вам нужна помощь - " + "пишите в наш аккаунт поддержки @bIudger"); } } else { Logger.Log("But bot isnt in second stage, ignoring"); } break; case "/start_registration": Logger.Log($"{user} asked for starting registration"); if (IsInSecondStage) { Logger.Log($"{user} But bot is in second stage, sending refuse message"); textToSend = "Извините, регистрация уже закончилась"; SendMessage(chat, textToSend); } else { if (localUser.State == States.RegistrationCompleted || localUser.State == States.TargetChosen || localUser.State == States.TargetSent) { Logger.Log($"{user} But he completed his registration already"); textToSend = "Вы уже завершили регистрацию, если вы хотите начать регистрацию заново, " + "то сначала отмените прежнюю отправив команду /abort_registration "; SendMessage(chat, textToSend); } else if (localUser.State == States.RegistrationStarted) { Logger.Log($"{user} But he started his registration already"); textToSend = "Вы уже начали регистрацию. Чтобы отменить нынешнюю регистрацию " + "отправьте команду /abort_registration, либо же /confirm_registration " + "чтобы завершить нынешнюю"; SendMessage(chat, textToSend); } else if (localUser.State == States.NewUser) { Logger.Log($"{user} has state NewUser. Starting registration"); localUser.State = States.RegistrationStarted; localUser.Stage = Stages.None; DBHandler.WriteCount(); Logger.Log($"{user}Asking a question"); AskProfileQuestion(chat, user, localUser); } } break; case "/confirm_registration": Logger.Log($"{user} asked for confirming registration"); if (IsInSecondStage) { Logger.Log($"But bot is in second stage, sending refuse message"); textToSend = "Извините, регистрация уже закончилась"; SendMessage(chat, textToSend); } else { if (localUser.State == States.RegistrationCompleted || localUser.State == States.TargetChosen || localUser.State == States.TargetSent) { Logger.Log("But he completed his registration already"); textToSend = "Вы уже завершили регистрацию. :)"; SendMessage(chat, textToSend); } else if (localUser.State == States.NewUser) { Logger.Log("But he didnt start registration"); textToSend = "Вы еще не начинали регистрацию, чтобы начать регистрацию " + "отправьте /start_registration"; SendMessage(chat, textToSend); } else if (localUser.State == States.RegistrationStarted) { if (localUser.Stage == Stages.StageBan) { Logger.Log($"{user} has Stage Ban so compliting his registration"); textToSend = "Поздравляем, Вы успешно всё заполнили и теперь остается только ждать, " + "когда бот пришлет анкету Вашей жертвы. Если Вам нужна будет помощь " + "или есть какие-то серьезные вопросы, то пишите сюда @bIudger. Для того " + "чтобы еще раз посмотреть памятку по датам отправьте команду /send_memo, " + "для того чтобы посмотреть свою анкету отправьте команду " + "/send_my_profile, чтобы изменить что-то в анкете отправьте " + "/abort_registration и заполните ее заново 👹"; SendMessage(chat, textToSend); localUser.State = States.RegistrationCompleted; DBHandler.WriteCount(); Logger.Log($"{user} Set State to RegistrationCompleted"); } else { Logger.Log( $"{user} has another than Ban Stage so cant complite his registration"); textToSend = "Вы еще не закончили регистрацию, пожалуйста заполните анкету до конца."; SendMessage(chat, textToSend); await Task.Delay(TimeSpan.FromSeconds(0.2)); AskProfileQuestion(chat, user, localUser); } } } break; case "/abort_registration": Logger.Log($"{user} asked for aborting registration"); if (IsInSecondStage) { Logger.Log($"But bot is in second stage, sending refuse message"); textToSend = "Извините, регистрация уже закончилась"; SendMessage(chat, textToSend); } else { if (localUser.State == States.TargetChosen || localUser.State == States.TargetSent) { Logger.Log("But he had recieve target so his profile cant be deleted"); textToSend = "Вы уже получили анкету цели и не можете удалить свою анкету. " + "Если Вам необходима помощь - обращайтесь в наш аккаунт поддержки @bIudger"; SendMessage(chat, textToSend); } else if (localUser.State == States.NewUser) { Logger.Log("But he didnt start registration"); textToSend = "Вы еще не начинали регистрацию, чтобы начать регистрацию " + "отправьте /start_registration"; SendMessage(chat, textToSend); } else { textToSend = "Вы хотите отменить регистрацию. Это очистит все поля в вашей анкете, вы уверены?\n" + "Для подтверждения отправьте команду /confirm_abort_registration"; SendMessage(chat, textToSend); } } break; case "/confirm_abort_registration": Logger.Log($"{user} tried to confirm aborting registration"); if (IsInSecondStage) { Logger.Log($"But bot is in second stage, sending refuse message"); textToSend = "Извините, регистрация уже закончилась"; SendMessage(chat, textToSend); } else { if (localUser.State == States.TargetChosen || localUser.State == States.TargetSent) { Logger.Log("But he had recieve target so his profile cant be deleted"); textToSend = "Вы уже получили анкету цели и не можете удалить свою анкету. " + "Если Вам необходима помощь - обращайтесь в наш аккаунт поддержки @bIudger"; SendMessage(chat, textToSend); } else if (localUser.State == States.NewUser) { Logger.Log("But he didnt start registration"); textToSend = "Вы еще не начинали регистрацию, чтобы начать регистрацию " + "отправьте /start_registration"; SendMessage(chat, textToSend); } else { Logger.Log("Wiping user answers..."); localUser.OfficialName = null; Logger.Log("--OfficialName"); localUser.Phone = null; Logger.Log("--Phone"); localUser.Post = null; Logger.Log("--Post"); localUser.FanOf = null; Logger.Log("--FanOf"); localUser.Ban = null; Logger.Log("--Ban"); Logger.Log("Done"); DBHandler.WriteCount(); localUser.State = States.NewUser; localUser.Stage = Stages.None; DBHandler.WriteCount(); Logger.Log($"{user} Successfully wiped profile"); textToSend = "Ваша анкета очищена и статус регистрации сброшен. " + "Чтобы начать регистрацию отправьте команду /start_registration"; SendMessage(chat, textToSend); await Task.Delay(TimeSpan.FromSeconds(0.2)); SendUserProfile(chat, localUser, user); } } break; case "/send_message_to_santa": Logger.Log($"{user} askes to send message to santa"); if (!IsInSecondStage) { Logger.Log($"{user} But bot isnt in second stage, sending refuse message"); textToSend = "Извините, регистрация еще не закончилась"; SendMessage(chat, textToSend); } else { if (localUser.State != States.TargetSent) { Logger.Log($"{user} But he had not recieve target, sending refuse message"); textToSend = "Извините, вы не учавствуете в тайном санте. " + "Если Вам необходима помощь - обращайтесь в наш аккаунт поддержки @bIudger"; SendMessage(chat, textToSend); } else { Logger.Log($"{user} Asking for message for santa"); textToSend = "Следующее Ваше сообщение (только первое) будет отправлено " + "Вашему Тайному Санте. Чтобы отменить это отправьте /cancel."; SendMessage(chat, textToSend); Logger.Log($"{user} Adding user to MesWaitList"); if (MesWaitList == null) { MesWaitList = new List <Telegram.Bot.Types.User> { user }; } else { MesWaitList.Add(user); } } } break; // TODO non-in-registration response default: if (localUser.State == States.RegistrationStarted) { Logger.Log($"{user} is in State RegistrationStarted"); if (IsInSecondStage) { Logger.Log($"{user} But bot is in second stage, ignoring"); } else { switch (localUser.Stage) { case Stages.None: Logger.Log($"{user} is on None stage, saving his answer to Name"); localUser.OfficialName = e.Message.Text; Logger.Log($"{user} setting Stage to Name"); localUser.Stage = Stages.StageOffName; DBHandler.WriteCount(); AskProfileQuestion(chat, user, localUser); break; case Stages.StageOffName: Logger.Log($"{user} is on Name stage, saving his answer to Phone"); localUser.Phone = e.Message.Text; Logger.Log($"{user} setting Stage to Phone"); localUser.Stage = Stages.StagePhone; DBHandler.WriteCount(); AskProfileQuestion(chat, user, localUser); break; case Stages.StagePhone: Logger.Log($"{user} is on Phone stage, saving his answer to Post"); localUser.Post = e.Message.Text; Logger.Log($"{user} setting Stage to Post"); localUser.Stage = Stages.StagePost; DBHandler.WriteCount(); AskProfileQuestion(chat, user, localUser); break; case Stages.StagePost: Logger.Log($"{user} is on Post stage, saving his answer to Fan"); localUser.FanOf = e.Message.Text; Logger.Log($"{user} setting Stage to Fan"); localUser.Stage = Stages.StageFan; DBHandler.WriteCount(); AskProfileQuestion(chat, user, localUser); break; case Stages.StageFan: Logger.Log($"{user} is on Fan stage, saving his answer to Ban"); localUser.Ban = e.Message.Text; Logger.Log($"{user} setting Stage to Ban"); localUser.Stage = Stages.StageBan; DBHandler.WriteCount(); AskProfileQuestion(chat, user, localUser); break; case Stages.StageBan: Logger.Log( $"{user} is on Ban stage, sending him info about registration confirmation"); textToSend = "Проверьте Вашу анкету еще раз потому, что после подтверждения " + "изменить ответы через бот невозможно:"; SendMessage(chat, textToSend); await Task.Delay(TimeSpan.FromSeconds(0.2)); SendUserProfile(chat, localUser, user); await Task.Delay(TimeSpan.FromSeconds(0.2)); textToSend = "Если все хорошо, то нажмите команду /confirm_registration " + "если же хотите что-то изменить, то нажмите команду /abort_registration " + "и заполните заново 👹"; SendMessage(chat, textToSend); break; } } } break; } break; default: Logger.Log($"{user} sent a {e.Message.Type} message"); Logger.Log($"Unresolved type, sending warning message"); SendMessage(chat, "Извините, бот не принимает таких сообщений, " + "если Вам необходима помощь - обращайтесь в наш аккаунт поддержки @bIudger "); break; } }
public async Task SendEventLogCoreAsync( string sendText, long chatId = -1, bool disableWebPreview = false, int replyToMessageId = -1, int forwardMessageId = -1, bool deleteForwardedMessage = false, bool sendGlobalOnly = false ) { var eventLogTargets = await GetEventLogTargets(chatId, sendGlobalOnly); foreach (var eventLogTarget in eventLogTargets) { try { if (forwardMessageId > 0) { var forwardMessage = await _botClient.ForwardMessageAsync( chatId : eventLogTarget, fromChatId : chatId, messageId : forwardMessageId ); replyToMessageId = forwardMessage.MessageId; if (deleteForwardedMessage) { await _botClient.DeleteMessageAsync( chatId : chatId, messageId : forwardMessageId ); } } } catch (Exception forwardMessageException) { Log.Warning( "Fail forward MessageId: {MessageId} at ChatId: {ChatId}. Message: {Message}", forwardMessageId, chatId, forwardMessageException.Message ); } try { var sentEventLog = await _botClient.SendTextMessageAsync( chatId : eventLogTarget, text : sendText, allowSendingWithoutReply : true, disableWebPagePreview : disableWebPreview, replyToMessageId : replyToMessageId, parseMode : ParseMode.Html ); Log.Information( "Send EventLog Successfully to ChatId: {ChatId}, Sent MessageId: {MessageId}", eventLogTarget, sentEventLog.MessageId ); } catch (Exception sendEventLogException) { Log.Error( sendEventLogException, "Fail send EventLog to ChatId: {ChatId}", eventLogTarget ); } } }