public async Task <(string, bool, string)> Handle(CallbackQuery data, object context = default, CancellationToken cancellationToken = default) { var callback = data.Data.Split(':'); if (callback[0] != "clone") { return(null, false, null); } if (!int.TryParse(callback.ElementAtOrDefault(1) ?? "", NumberStyles.Integer, CultureInfo.InvariantCulture, out var pollId)) { return("Poll is publishing. Try later.", true, null); } var poll = await myContext .Set <Poll>() .Where(_ => _.Id == pollId) .IncludeRelatedData() .FirstOrDefaultAsync(cancellationToken); if (poll == null) { return("Poll is not found", true, null); } var pollMessage = new PollMessage { ChatId = data.From.Id, ChatType = ChatType.Private, UserId = data.From.Id, InlineMesssageId = data.InlineMessageId, Poll = poll }; await myRaidService.AddPollMessage(pollMessage, myUrlHelper, cancellationToken); var botUser = await myBot.GetMeAsync(cancellationToken); return(null, false, $"https://t.me/{botUser.Username}?start={pollMessage.GetExtendedPollId()}"); }