示例#1
0
    public override async Task HandleAsync(
        IUpdateContext context,
        UpdateDelegate next,
        string[] args
        )
    {
        await _telegramService.AddUpdateContext(context);

        var isSudoer = _telegramService.IsFromSudo;

        await _telegramService.DeleteSenderMessageAsync();

        if (!isSudoer)
        {
            Log.Debug("Only sudo can do Sync Kata!");
            return;
        }

        await _telegramService.AppendTextAsync("Sedang mengsinkronkan Word Filter");

        await _wordFilterService.UpdateWordListsCache();

        await _telegramService.AppendTextAsync("Selesai mengsinkronkan.");

        await _telegramService.DeleteAsync(delay : 3000);
    }
示例#2
0
    public override async Task HandleAsync(
        IUpdateContext context,
        UpdateDelegate next,
        string[] args
        )
    {
        await _telegramService.AddUpdateContext(context);

        var chatId = _telegramService.ChatId;

        if (!await _telegramService.CheckUserPermission())
        {
            Log.Warning("This command only for sudo!");
            return;
        }

        await _telegramService.AppendTextAsync("Memulai Job RSS..");

        _rssFeedService.UnRegisterRssFeedByChatId(chatId);

        var rssSettings = await _rssService.GetRssSettingsAsync(chatId);

        var rssCount = rssSettings.Count();

        foreach (var rssSetting in rssSettings)
        {
            var urlFeed = rssSetting.UrlFeed;

            _rssFeedService.RegisterUrlFeed(chatId, urlFeed);
        }

        await _telegramService.AppendTextAsync($"Sebanyak {rssCount} RSS berhasil dimulai");
    }
示例#3
0
        public override async Task HandleAsync(IUpdateContext context, UpdateDelegate next, string[] args,
                                               CancellationToken cancellationToken)
        {
            _telegramService = new TelegramService(context);
            _rssService      = new RssService(_telegramService.Message);
            var msg      = _telegramService.Message;
            var msgId    = msg.MessageId;
            var chatId   = msg.Chat.Id;
            var msgText  = msg.Text;
            var dateDate = DateTime.UtcNow.ToString("yyyy-MM-dd");

            var isAdminOrPrivate = await _telegramService.IsAdminOrPrivateChat()
                                   .ConfigureAwait(false);

            if (!isAdminOrPrivate)
            {
                var send = "Maaf, hanya Admin yang dapat mengimport daftar RSS";
                await _telegramService.SendTextAsync(send)
                .ConfigureAwait(false);

                return;
            }

            await _telegramService.AppendTextAsync("Sedang mempersiapkan")
            .ConfigureAwait(false);

            var filePath = $"{chatId}/rss-feed_{dateDate}_{msgId}.txt";

            filePath = await _telegramService.DownloadFileAsync(filePath)
                       .ConfigureAwait(false);

            await _telegramService.AppendTextAsync("Sedang membuka berkas")
            .ConfigureAwait(false);

            var rssLists = await File.ReadAllLinesAsync(filePath, cancellationToken)
                           .ConfigureAwait(false);

            foreach (var rssList in rssLists)
            {
                Log.Information($"Importing {rssList}");
                var data = new Dictionary <string, object>()
                {
                    { "url_feed", rssList },
                    { "chat_id", _telegramService.Message.Chat.Id },
                    { "from_id", _telegramService.Message.From.Id }
                };

                await _rssService.SaveRssSettingAsync(data)
                .ConfigureAwait(false);
            }

            await _telegramService.AppendTextAsync($"Memeriksa RSS duplikat")
            .ConfigureAwait(false);

            await _rssService.DeleteDuplicateAsync()
            .ConfigureAwait(false);

            await _telegramService.AppendTextAsync($"{rssLists.Length} RSS berhasil di import")
            .ConfigureAwait(false);
        }
        public override async Task HandleAsync(IUpdateContext context, UpdateDelegate next, string[] args,
                                               CancellationToken cancellationToken)
        {
            _telegramService = new TelegramService(context);

            var isSudoer = _telegramService.IsSudoer();
            var isAdmin  = await _telegramService.IsAdminGroup()
                           .ConfigureAwait(false);

            if (isSudoer)
            {
                await _telegramService.DeleteAsync(_telegramService.Message.MessageId)
                .ConfigureAwait(false);

                await _telegramService.AppendTextAsync("Sedang mengsinkronkan Word Filter")
                .ConfigureAwait(false);

                await Sync.SyncWordToLocalAsync().ConfigureAwait(false);

                await _telegramService.AppendTextAsync("Selesai mengsinkronkan.")
                .ConfigureAwait(false);

                await _telegramService.DeleteAsync(delay : 3000)
                .ConfigureAwait(false);
            }
        }
    public static async Task DeleteForceSubsChannelAsync(this TelegramService telegramService)
    {
        await telegramService.DeleteSenderMessageAsync();

        if (!await telegramService.CheckFromAdminOrAnonymous())
        {
            return;
        }

        var fSubsService = telegramService.GetRequiredService <ForceSubsService>();

        var subscriptions = await fSubsService.GetSubsAsync(telegramService.ChatId);

        var inlineKeyboard = new List <IEnumerable <InlineKeyboardButton> >();

        if (subscriptions.Count == 0)
        {
            await telegramService.AppendTextAsync(
                sendText : "Tidak ada subscription di Grup ini",
                scheduleDeleteAt : DateTime.UtcNow.AddMinutes(1)
                );

            return;
        }

        var htmlMessage = HtmlMessage.Empty
                          .BoldBr("Daftar Subscription")
                          .TextBr("Pilih Channel untuk dihapus: ");

        subscriptions.ForEach(
            subscription => {
            inlineKeyboard.Add(
                new InlineKeyboardButton[]
            {
                InlineKeyboardButton.WithCallbackData(subscription.ChannelTitle, "fsub delete " + subscription.ChannelId)
            }
                );
        }
            );

        inlineKeyboard.Add(
            new InlineKeyboardButton[]
        {
            InlineKeyboardButton.WithCallbackData("❌ Batal", "delete-message current-message")
        }
            );

        await telegramService.AppendTextAsync(
            sendText : htmlMessage.ToString(),
            replyMarkup : inlineKeyboard.ToButtonMarkup(),
            scheduleDeleteAt : DateTime.UtcNow.AddMinutes(1),
            includeSenderMessage : true,
            preventDuplicateSend : true
            );
    }
    public override async Task HandleAsync(
        IUpdateContext context,
        UpdateDelegate next,
        string[] args
        )
    {
        await _telegramService.AddUpdateContext(context);

        var fromId       = _telegramService.FromId;
        var chatId       = _telegramService.ChatId;
        var messageTexts = _telegramService.MessageTextParts;
        var reasonBan    = messageTexts.ElementAtOrDefault(1) ?? "Import from Bot";

        if (!_telegramService.IsFromSudo)
        {
            await _telegramService.DeleteSenderMessageAsync();
        }

        var repMessage = _telegramService.ReplyToMessage;

        if (repMessage.Type != MessageType.Document)
        {
            await _telegramService.SendTextMessageAsync("Reply persan dokument untuk Import Global Ban. Biasanya berkas .xsv atau .json");
        }

        var document         = repMessage.Document;
        var documentFileName = document.FileName;

        await _telegramService.AppendTextAsync("Mengambil berkas..");

        var fileName = await _telegramService.DownloadFileAsync("import_gban");

        await _telegramService.AppendTextAsync($"Menguraikan berkas {documentFileName}");

        var import = await _globalBanService.ImportFile
                     (
            fileName,
            new GlobalBanItem()
        {
            ReasonBan  = reasonBan,
            BannedBy   = fromId,
            BannedFrom = chatId
        }
                     );

        if (import > 0)
        {
            await _telegramService.AppendTextAsync($"Sebanyak {import} item berhasil ditambahkan");
        }
        else
        {
            await _telegramService.AppendTextAsync($"Semua data sudah ditambahkan");
        }
    }
    public static async Task NoUsernameKickMemberAsync(this TelegramService telegramService)
    {
        var chatId = telegramService.ChatId;

        if (telegramService.IsPrivateGroup)
        {
            await telegramService.SendTextMessageAsync(
                "Perintah ini hanya tersedia untuk Grup Publik",
                scheduleDeleteAt : DateTime.UtcNow.AddMinutes(1),
                includeSenderMessage : true
                );

            return;
        }

        if (!await telegramService.CheckFromAdminOrAnonymous())
        {
            await telegramService.DeleteSenderMessageAsync();

            return;
        }

        var wTelegramApiService = telegramService.GetRequiredService <WTelegramApiService>();

        var chatTitleLink = telegramService.Chat.GetChatNameLink();

        var participant = await wTelegramApiService.GetAllParticipants(chatId, disableCache : true);

        var allUsers = participant.users.Select(pair => pair.Value).ToList();

        var noUsernameUsers = allUsers.Where(user => user.username == null).ToList();

        var htmlMessage = HtmlMessage.Empty
                          .Bold("No Username Kick Member").Br()
                          .Bold("Chat: ").TextBr(chatTitleLink)
                          .Bold("Total: ").CodeBr(allUsers.Count.ToString())
                          .Bold("No Username: "******"Proses selesai.",
            scheduleDeleteAt : DateTime.UtcNow.AddMinutes(1),
            includeSenderMessage : true
            );
    }
    public static async Task AddSpellAsync(this TelegramService telegramService)
    {
        var spellService = telegramService.GetRequiredService <SpellService>();
        var typo         = telegramService.GetCommandParam(0);
        var fix          = telegramService.GetCommandParam(1);
        var chatId       = telegramService.ChatId;
        var fromId       = telegramService.FromId;

        var spellData = new Spell()
        {
            Typo      = typo,
            Fix       = fix,
            ChatId    = chatId,
            FromId    = fromId,
            CreatedAt = DateTime.UtcNow
        };

        if (!spellData.Validate <AddSpellValidator, Spell>().IsValid)
        {
            await telegramService.SendTextMessageAsync(
                sendText : "Sepertinya input Spell tidak valid" +
                "\n<code>/add_spell {typo} {fix}</code>",
                scheduleDeleteAt : DateTime.UtcNow.AddMinutes(5),
                includeSenderMessage : true
                );

            return;
        }

        var htmlMessage = HtmlMessage.Empty;
        var saveSpell   = await spellService.SaveSpell(
            new Spell()
        {
            Typo      = typo,
            Fix       = fix,
            ChatId    = chatId,
            FromId    = fromId,
            CreatedAt = DateTime.UtcNow
        }
            );

        if (saveSpell)
        {
            htmlMessage.TextBr("Spell berhasil disimpan")
            .Bold("Typo: ").CodeBr(typo)
            .Bold("Fix: ").CodeBr(fix);
        }
        else
        {
            htmlMessage.TextBr("Spell sudah disimpan");
        }

        await spellService.GetSpellAll(evictBefore : true);

        await telegramService.AppendTextAsync(
            sendText : htmlMessage.ToString(),
            scheduleDeleteAt : DateTime.UtcNow.AddMinutes(5),
            includeSenderMessage : true
            );
    }
        public static async Task DeleteCityAsync(this TelegramService telegramService)
        {
            if (!await telegramService.CheckUserPermission())
            {
                await telegramService.SendTextMessageAsync(
                    sendText : "Kamu tidak memiliki akses untuk menghapus tetapan Kota",
                    scheduleDeleteAt : DateTime.UtcNow.AddMinutes(5),
                    includeSenderMessage : true
                    );

                return;
            }

            var cityName = telegramService.MessageOrEditedText.GetTextWithoutCmd();

            if (cityName.IsNullOrEmpty())
            {
                await telegramService.SendTextMessageAsync(
                    sendText : "Kota apa yang mau di hapus?",
                    scheduleDeleteAt : DateTime.UtcNow.AddMinutes(5),
                    includeSenderMessage : true
                    );

                return;
            }

            await telegramService.AppendTextAsync("Sedang menghapus Kota");

            var chatId     = telegramService.ChatId;
            var shalatTome = telegramService.GetRequiredService <ShalatTimeService>();
            var deleteItem = await shalatTome.DeleteCityAsync(chatId, cityName);

            var deleteResult = deleteItem switch
            {
示例#10
0
        public override async Task HandleAsync(IUpdateContext context, UpdateDelegate next, string[] args,
                                               CancellationToken cancellationToken)
        {
            _telegramService = new TelegramService(context);

            var msg = _telegramService.MessageOrEdited;

            var keyboard = new InlineKeyboardMarkup(
                InlineKeyboardButton.WithCallbackData("Ping", "PONG")
                );

            await _telegramService.AppendTextAsync("ℹ️ Pong!!").ConfigureAwait(false);

            var isSudoer = msg.From.Id.IsSudoer();

            if (msg.Chat.Type == ChatType.Private && isSudoer)
            {
                // await "\n<b>Engine info.</b>".AppendTextAsync();
                await _telegramService.AppendTextAsync("🎛 <b>Engine info.</b>").ConfigureAwait(false);

                // var getWebHookInfo = await _chatProcessor.Client.GetWebhookInfoAsync(cancellationToken);
                var getWebHookInfo = await _telegramService.Client.GetWebhookInfoAsync(cancellationToken)
                                     .ConfigureAwait(false);

                if (getWebHookInfo.Url.IsNullOrEmpty())
                {
                    // sendText += "\n\n<i>Bot run in Poll mode.</i>";
                    await _telegramService.AppendTextAsync("\n<i>Bot run in Poll mode.</i>", keyboard).ConfigureAwait(false);
                }
                else
                {
                    var hookInfo = "\n<i>Bot run in Webhook mode.</i>" +
                                   $"\nUrl WebHook: {getWebHookInfo.Url}" +
                                   $"\nUrl Custom Cert: {getWebHookInfo.HasCustomCertificate}" +
                                   $"\nAllowed Updates: {getWebHookInfo.AllowedUpdates}" +
                                   $"\nPending Count: {getWebHookInfo.PendingUpdateCount}" +
                                   $"\nMaxConnection: {getWebHookInfo.MaxConnections}" +
                                   $"\nLast Error: {getWebHookInfo.LastErrorDate}" +
                                   $"\nError Message: {getWebHookInfo.LastErrorMessage}";

                    await _telegramService.AppendTextAsync(hookInfo, keyboard)
                    .ConfigureAwait(false);
                }
            }

            // await sendText.AppendTextAsync(keyboard);
        }
        public override async Task HandleAsync(IUpdateContext context, UpdateDelegate next, string[] args,
                                               CancellationToken cancellationToken)
        {
            _telegramService = new TelegramService(context);
            var msg = context.Update.Message;

            var isSudoer = _telegramService.IsSudoer();

            if (isSudoer)
            {
                var partedMsg = msg.Text.Split(" ");
                var param1    = partedMsg.ValueOfIndex(1);
                Log.Debug($"RssCtl Param1: {param1}");

                await _telegramService.AppendTextAsync("Access Granted")
                .ConfigureAwait(false);

                switch (param1)
                {
                case "start":
                    await _telegramService.AppendTextAsync("Starting RSS Service")
                    .ConfigureAwait(false);

                    RssScheduler.InitScheduler();
                    await _telegramService.AppendTextAsync("Start successfully.")
                    .ConfigureAwait(false);

                    break;

                case "stop":
                    await _telegramService.AppendTextAsync("Stopping RSS Service")
                    .ConfigureAwait(false);

                    Tools.Hangfire.DeleteAllJobs();
                    await _telegramService.AppendTextAsync("Stop successfully.")
                    .ConfigureAwait(false);

                    break;
                }
            }
        }
示例#12
0
    public override async Task HandleAsync(
        IUpdateContext context,
        UpdateDelegate next,
        string[] args
    )
    {
        await _telegramService.AddUpdateContext(context);

        var chatId = _telegramService.ChatId;

        if (!await _telegramService.CheckUserPermission())
        {
            Log.Warning("This command only for sudo!");
            return;
        }

        await _telegramService.AppendTextAsync("Mematikan Job RSS..");
        var jobCount = _rssFeedService.UnRegisterRssFeedByChatId(chatId);

        await _telegramService.AppendTextAsync($"Sebanyak {jobCount} RSS berhasil dimatikan.");
    }
    public static async Task GetSubsListChannelAsync(this TelegramService telegramService)
    {
        var fSubsService = telegramService.GetRequiredService <ForceSubsService>();

        var subscriptions = await fSubsService.GetSubsAsync(telegramService.ChatId);

        if (subscriptions.Count == 0)
        {
            await telegramService.AppendTextAsync(
                sendText : "Tidak ada subscription di Grup ini",
                scheduleDeleteAt : DateTime.UtcNow.AddMinutes(1),
                includeSenderMessage : true,
                preventDuplicateSend : true
                );

            return;
        }

        var htmlMessage = HtmlMessage.Empty
                          .BoldBr("Daftar Subscription")
                          .Bold("Jumlah: ").TextBr(subscriptions.Count.ToString());

        var inlineKeyboard = new List <IEnumerable <InlineKeyboardButton> >();

        subscriptions.ForEach(
            subscription => {
            inlineKeyboard.Add(
                new InlineKeyboardButton[]
            {
                InlineKeyboardButton.WithUrl(subscription.ChannelTitle, subscription.InviteLink)
            }
                );
        }
            );

        await telegramService.SendTextMessageAsync(
            sendText : htmlMessage.ToString(),
            replyMarkup : inlineKeyboard.ToButtonMarkup(),
            scheduleDeleteAt : DateTime.UtcNow.AddMinutes(1),
            preventDuplicateSend : true,
            includeSenderMessage : true
            );
    }
        public static async Task SaveShalatTimeCityAsync(this TelegramService telegramService)
        {
            var chatId = telegramService.ChatId;
            var userId = telegramService.FromId;

            var inputCity = telegramService.MessageOrEditedText.GetTextWithoutCmd();

            if (!await telegramService.CheckUserPermission())
            {
                await telegramService.SendTextMessageAsync(
                    sendText : "Untuk waktu Shalat, hanya Admin yang dapat mengatur Kota untuk obrolan ini, " +
                    "namun kamu bisa mengaturnya di Japri untukmu sendiri.",
                    scheduleDeleteAt : DateTime.UtcNow.AddMinutes(5),
                    includeSenderMessage : true
                    );

                return;
            }

            if (inputCity.IsNullOrEmpty())
            {
                await telegramService.SendTextMessageAsync(
                    sendText : "Silahkan tulis nama kota yang ingin dicari",
                    scheduleDeleteAt : DateTime.UtcNow.AddMinutes(5),
                    includeSenderMessage : true
                    );

                return;
            }

            var fathimahApiService = telegramService.GetRequiredService <FathimahApiService>();

            var cities = await fathimahApiService.GetAllCityAsync();

            var filteredCity = cities.Kota
                               .Where(
                kota =>
                kota.Nama.Contains(inputCity, StringComparison.CurrentCultureIgnoreCase) ||
                kota.Id.ToString() == inputCity
                )
                               .ToList();
            var filteredCityCount = filteredCity.Count;
            var filteredCityStr   = filteredCity
                                    .Select(
                (
                    kota,
                    index
                ) => $"{index + 1}. <code>{kota.Id}</code> <code>{kota.Nama}</code>"
                )
                                    .JoinStr("\n");

            var findResult = filteredCity.Count switch
            {
                0 => "Kota yang di masukkan tidak di temukan, silakan cari kota lain",
                > 1 => $"Ditemukan sebanyak {filteredCityCount} kota, silakan pilih salah satu" +
                $"\n{filteredCityStr}",
                _ => null
            };

            if (findResult != null)
            {
                await telegramService.SendTextMessageAsync(
                    sendText : findResult,
                    scheduleDeleteAt : DateTime.UtcNow.AddMinutes(5),
                    includeSenderMessage : true
                    );

                return;
            }

            var shalatTimeService       = telegramService.GetRequiredService <ShalatTimeService>();
            var shalatTimeNotifyService = telegramService.GetRequiredService <ShalatTimeNotifyService>();
            var firstCity = filteredCity.FirstOrDefault();

            await telegramService.AppendTextAsync($"<b>Kota/Kab ID: </b><code>{firstCity.Id}</code>");

            await telegramService.AppendTextAsync($"<b>Nama: </b><code>{firstCity.Nama}</code>");

            if (await shalatTimeService.IsExistAsync(chatId, firstCity.Nama))
            {
                await telegramService.AppendTextAsync(
                    sendText : "Sepertinya kota ini sudah ditambahkan",
                    scheduleDeleteAt : DateTime.UtcNow.AddMinutes(5)
                    );

                return;
            }

            await telegramService.AppendTextAsync("Sedang menyimpan data kota");

            await shalatTimeService.SaveCityAsync(
                new ShalatTime()
            {
                ChatId             = chatId,
                UserId             = userId,
                CityId             = firstCity.Id,
                CityName           = firstCity.Nama,
                EnableNotification = true,
                CreatedAt          = DateTime.UtcNow,
                UpdatedAt          = DateTime.UtcNow
            }
                );

            shalatTimeNotifyService.RegisterJobShalatTime(chatId);

            await telegramService.AppendTextAsync(
                sendText : "Kota berhasil disimpan",
                scheduleDeleteAt : DateTime.UtcNow.AddMinutes(5),
                includeSenderMessage : true
                );
        }
    public static async Task AddForceSubsChannelAsync(this TelegramService telegramService)
    {
        if (!await telegramService.CheckFromAdminOrAnonymous())
        {
            await telegramService.DeleteSenderMessageAsync();

            return;
        }

        var fSubsService = telegramService.GetRequiredService <ForceSubsService>();
        var chatService  = telegramService.GetRequiredService <ChatService>();
        var channelId    = telegramService.GetCommandParamAt <long>(0);

        if (channelId == 0)
        {
            await telegramService.SendTextMessageAsync(
                sendText : "Silakan masukkan ID Channel yang ingin ditambahkan",
                scheduleDeleteAt : DateTime.UtcNow.AddMinutes(1),
                includeSenderMessage : true
                );

            return;
        }

        await telegramService.AppendTextAsync("<b>Force Subscription</b>");

        await telegramService.AppendTextAsync($"Channel ID: {channelId}");

        try
        {
            await telegramService.AppendTextAsync("Sedang memeriksa..");

            var chat = await chatService.GetChatAsync(channelId);

            if (chat.Type != ChatType.Channel)
            {
                await telegramService.AppendTextAsync("ID diatas bukan sebuah Channel", reappendText : true);

                return;
            }

            await telegramService.AppendTextAsync($"Title: {chat.Title}", reappendText : true);

            var fSubData = new ForceSubscription()
            {
                ChatId       = telegramService.ChatId,
                UserId       = telegramService.FromId,
                ChannelId    = channelId,
                ChannelTitle = chat.Title,
                InviteLink   = chat.InviteLink,
            };

            var save = await fSubsService.SaveSubsAsync(fSubData);

            var saveMessage = save == 1 ? "Sudah disimpan" : "Berhasil disimpan";

            await telegramService.AppendTextAsync(
                sendText : saveMessage,
                scheduleDeleteAt : DateTime.UtcNow.AddMinutes(1),
                includeSenderMessage : true
                );
        }
        catch (Exception e)
        {
            var errorMessage = e.Message switch
            {
                {} a when a.Contains("not found") => $"Channel tidak ditemukan",
                _ => "Terjadi kesalahan ketika menyimpan data"
            };

            await telegramService.AppendTextAsync(
                errorMessage,
                reappendText : true,
                scheduleDeleteAt : DateTime.UtcNow.AddMinutes(1),
                includeSenderMessage : true
                );
        }
    }
示例#16
0
    public static async Task AddRssUrlAsync(this TelegramService telegramService)
    {
        var chatId = telegramService.ChatId;
        var fromId = telegramService.FromId;

        var checkUserPermission = await telegramService.CheckUserPermission();

        if (!checkUserPermission)
        {
            Log.Warning("Modify RSS only for admin or private chat!");
            await telegramService.DeleteSenderMessageAsync();

            return;
        }

        var rssUrl = telegramService.GetCommandParamAt <string>(0);

        if (rssUrl.IsNullOrEmpty())
        {
            await telegramService.SendTextMessageAsync("Apa url Feednya?");

            return;
        }

        rssUrl = rssUrl.TryFixRssUrl();
        await telegramService.AppendTextAsync($"URL: {rssUrl}");

        if (!rssUrl.CheckUrlValid())
        {
            await telegramService.AppendTextAsync("Url tersebut sepertinya tidak valid");

            return;
        }

        await telegramService.AppendTextAsync($"Memeriksa RSS Feed");

        var isValid = await rssUrl.IsValidUrlFeed();

        if (!isValid)
        {
            var baseUrl = rssUrl.GetBaseUrl();

            await telegramService.AppendTextAsync("Mencari kemungkinan RSS Feed yang valid");

            var foundUrl = await baseUrl.FindUrlFeed();

            Log.Debug("Found URL Feed: {FoundUrl}", foundUrl);

            if (foundUrl.IsNotNullOrEmpty())
            {
                await telegramService.AppendTextAsync("Menemukan: " + foundUrl);

                rssUrl = foundUrl;
            }
            else
            {
                var notFoundRss = $"Kami tidak dapat memvalidasi {rssUrl} adalah Link RSS yang valid, " +
                                  $"dan mencoba mencari di {baseUrl} tetap tidak dapat menemukan.";

                await telegramService.EditMessageTextAsync(notFoundRss);

                return;
            }
        }

        var rssService     = telegramService.GetRequiredService <RssService>();
        var rssFeedService = telegramService.GetRequiredService <RssFeedService>();
        var isFeedExist    = await rssService.IsRssExist(chatId, rssUrl);

        Log.Information("Is Url Exist: {IsFeedExist}", isFeedExist);

        if (!isFeedExist)
        {
            await telegramService.AppendTextAsync($"Sedang menyimpan..");

            var data = new Dictionary <string, object>()
            {
                { "url_feed", rssUrl },
                { "chat_id", chatId },
                { "from_id", fromId }
            };

            await rssService.SaveRssSettingAsync(data);

            await telegramService.AppendTextAsync("Memastikan Scheduler sudah berjalan");

            rssFeedService.RegisterUrlFeed(chatId, rssUrl);

            await telegramService.AppendTextAsync($"Tautan berhasil di simpan");
        }
        else
        {
            await telegramService.AppendTextAsync($"Tautan sudah di simpan");
        }
    }
示例#17
0
        public override async Task HandleAsync(IUpdateContext context, UpdateDelegate next, string[] args,
                                               CancellationToken cancellationToken)
        {
            _telegramService = new TelegramService(context);

            var kickTargets = new List <User>();

            var     msg    = context.Update.Message;
            Message repMsg = null;
            var     fromId = msg.From.Id;

            // var idTargets = new List<int>();

            kickTargets.Add(msg.From);

            if (msg.ReplyToMessage != null)
            {
                repMsg = msg.ReplyToMessage;
                // idTarget = repMsg.From.id;
                kickTargets.Add(repMsg.From);

                if (repMsg.NewChatMembers != null)
                {
                    kickTargets.Clear();
                    var userTargets = repMsg.NewChatMembers;
                    kickTargets.AddRange(userTargets);

                    // foreach (var target in userTargets)
                    // {
                    //     idTargets.Add(target.Id);
                    // }
                }
            }

            await _telegramService.DeleteAsync(msg.MessageId)
            .ConfigureAwait(false);

            var isAdmin = await _telegramService.IsAdminGroup()
                          .ConfigureAwait(false);

            if (kickTargets[0].Id != msg.From.Id && isAdmin)
            {
                var isKicked = false;
                foreach (var target in kickTargets)
                {
                    var idTarget = target.Id;
                    var sendText = string.Empty;

                    // await _chatProcessor.AppendTextAsync($"Sedang menendang {idTarget}");
                    isKicked = await _telegramService.KickMemberAsync(target)
                               .ConfigureAwait(false);

                    await _telegramService.UnbanMemberAsync(target)
                    .ConfigureAwait(false);

                    if (isKicked)
                    {
                        sendText = $"{target} berhasil di tendank ";

                        sendText += idTarget == fromId ? $"oleh Self-kick" : $".";
                    }
                    else
                    {
                        sendText = $"Gagal menendang {idTarget}";
                    }

                    await _telegramService.AppendTextAsync(sendText)
                    .ConfigureAwait(false);
                }

                if (isKicked)
                {
                    await _telegramService.AppendTextAsync($"Sebanyak {kickTargets.Count} berhasil di tendang.")
                    .ConfigureAwait(false);
                }
                else
                {
                    await _telegramService.AppendTextAsync("Gagal menendang bbrp anggota")
                    .ConfigureAwait(false);
                }
            }
            else if (kickTargets[0].Id == fromId)
            {
                var idTarget = kickTargets[0];
                var isKicked = false;
                // await _chatProcessor.AppendTextAsync($"Sedang menendang {idTarget}");
                isKicked = await _telegramService.KickMemberAsync(idTarget)
                           .ConfigureAwait(false);

                if (isKicked)
                {
                    var sendText = $"{idTarget} berhasil di tendang ";
                    sendText += idTarget.Id == fromId ? $"oleh Self-kick" : $".";
                    await _telegramService.AppendTextAsync(sendText)
                    .ConfigureAwait(false);
                }
                else
                {
                    var sendTexts = $"Tendang {idTarget} gagal.";
                    await _telegramService.SendTextAsync(sendTexts)
                    .ConfigureAwait(false);
                }
            }
            else
            {
                await _telegramService.SendTextAsync("Hanya admin yang bisa mengeksekusi")
                .ConfigureAwait(false);
            }
        }
    public static async Task InactiveKickMemberAsync(this TelegramService telegramService)
    {
        if (!await telegramService.CheckFromAdminOrAnonymous())
        {
            await telegramService.SendTextMessageAsync(
                "Kamu tidak mempunyai akses ke fitur ini.",
                scheduleDeleteAt : DateTime.UtcNow.AddMinutes(1),
                includeSenderMessage : true
                );

            return;
        }
        var wTelegramApiService = telegramService.GetRequiredService <WTelegramApiService>();

        var chatId = telegramService.ChatId;
        var param1 = telegramService.GetCommandParam(0);

        if (param1.IsNullOrEmpty())
        {
            await telegramService.SendTextMessageAsync(
                "Tentukan berapa lama durasi tidak aktif, misal 3d.",
                scheduleDeleteAt : DateTime.UtcNow.AddMinutes(10),
                includeSenderMessage : true
                );

            return;
        }

        try
        {
            var timeOffset = param1.ToTimeSpan();

            if (timeOffset < TimeSpan.FromDays(1))
            {
                await telegramService.SendTextMessageAsync(
                    "Terlalu banyak Anggota yang bakal ditendang, silakan tentukan waktu yang lebih lama, misal 3d.",
                    scheduleDeleteAt : DateTime.UtcNow.AddMinutes(10),
                    includeSenderMessage : true
                    );

                return;
            }

            var channelsChannelParticipants = await wTelegramApiService.GetAllParticipants(chatId, disableCache : true);

            var allParticipants      = channelsChannelParticipants.users;
            var inactiveParticipants = allParticipants.Values
                                       .Where(
                user =>
                user.LastSeenAgo > timeOffset &&
                user.bot_info_version == 0
                )
                                       .ToList();

            var htmlMessage = HtmlMessage.Empty
                              .Bold("Inactive Kick Member").Br()
                              .Bold("Total: ").CodeBr(allParticipants.Count.ToString())
                              .Bold("Inactive: ").CodeBr(inactiveParticipants.Count.ToString());

            await telegramService.AppendTextAsync(htmlMessage.ToString());

            await inactiveParticipants.AsyncParallelForEach(
                maxDegreeOfParallelism : 20,
                body : async user => {
                await telegramService.KickMemberAsync(user.ID, unban: true);
            }
                );

            await telegramService.AppendTextAsync(
                "Selesai.",
                scheduleDeleteAt : DateTime.UtcNow.AddMinutes(1),
                includeSenderMessage : true
                );
        }
        catch (Exception exception)
        {
            await telegramService.SendTextMessageAsync(
                "Suatu kesalah telah terjadi." +
                "\nError: " +
                exception.Message
                );

            Log.Error(
                exception,
                "Error Inactive Kick Member at {ChatId}",
                chatId
                );
        }
    }
示例#19
0
    public override async Task HandleAsync(IUpdateContext context, UpdateDelegate next, string[] args)
    {
        await _telegramService.AddUpdateContext(context);

        var param1 = _telegramService.MessageTextParts.ValueOfIndex(1);
        var param2 = _telegramService.MessageTextParts.ValueOfIndex(2);

        var chatId   = _telegramService.ChatId;
        var chatType = _telegramService.Message.Chat.Type;
        var fromId   = _telegramService.FromId;
        var msg      = _telegramService.Message;
        var msgId    = msg.MessageId;

        if (!_telegramService.IsFromSudo)
        {
            Log.Warning("Test only for Sudo!");
            return;
        }

        Log.Information("Adding easy caching..");
        await _easyCachingProvider.SetAsync(msgId.ToString(), msg, TimeSpan.FromMinutes(1));

        Log.Information("Test started..");
        await _telegramService.AppendTextAsync("Sedang mengetes sesuatu");

        if (param1.IsNullOrEmpty())
        {
            await _telegramService.AppendTextAsync("No Test Param");

            return;
        }

        await _telegramService.AppendTextAsync($"Flags: {param1}");

        switch (param1)
        {
        case "ex-keyboard":
            await ExtractReplyMarkup();

            break;

        // case "mk-remove-all":
        //     MonkeyCacheRemoveAll();
        //     break;

        // case "mk-remove-expires":
        //     MonkeyCacheRemoveExpires();
        //     break;

        // case "mk-view-all":
        //     MonkeyCacheViewAll();
        //     break;

        // case "mk-save-current":
        //     MonkeyCacheSaveCurrent();
        //     break;

        case "ml-nlp":
            MachineLearningProcessNlp();
            break;

        case "ml-predict":
            await MachineLearningPredict();

            break;

        case "nsfw-detect":
            await NsfwDetect();

            break;

        case "ldb-save-current":
            await LiteDbSaveCurrent();

            break;

        case "sysinfo":
            await GetSysInfo();

            break;

        case "uniqid-gen":
            var id = StringUtil.GenerateUniqueId(param2.ToInt());
            await _telegramService.AppendTextAsync($"UniqueID: {id}");

            break;

        case "wh-check":
            await WebhookCheck();

            break;

        case "dl-gen":
            var directLink = await DirectLinkParser(param2);

            await _telegramService.AppendTextAsync($"DL: {directLink}");

            break;

        case "parse-bl":
            var url     = "https://raw.githubusercontent.com/mhhakim/pihole-blocklist/master/p**n.txt";
            var listUrl = await _blockListService.ParseList(url);

            var msgText = $"{listUrl.Name}" +
                          $"\n{listUrl.Source}" +
                          $"\n{listUrl.LastUpdate}" +
                          $"\n{listUrl.DomainCount}";

            await _telegramService.AppendTextAsync($"{msgText}");

            break;

        default:
            await _telegramService.AppendTextAsync($"Feature '{param1}' is not available.");

            Log.Warning("Feature '{0}' is not available", param1);

            break;
        }

        await _telegramService.AppendTextAsync("Complete");
    }
    public static async Task AddGlobalBanUserAsync(this TelegramService telegramService)
    {
        long   userId;
        string reason;

        var message = telegramService.Message;

        var chatId     = telegramService.ChatId;
        var fromId     = telegramService.FromId;
        var partedText = telegramService.MessageTextParts;
        var param0     = partedText.ElementAtOrDefault(0) ?? "";
        var param1     = partedText.ElementAtOrDefault(1) ?? "";

        await telegramService.DeleteSenderMessageAsync();

        if (!telegramService.IsFromSudo)
        {
            return;
        }

        if (telegramService.ReplyToMessage != null)
        {
            var replyToMessage = telegramService.ReplyToMessage;
            userId = replyToMessage.From.Id;
            reason = message.Text;

            if (replyToMessage.ForwardFrom != null)
            {
                userId = replyToMessage.ForwardFrom.Id;
            }

            if (reason.IsNotNullOrEmpty())
            {
                reason = partedText.Skip(1).JoinStr(" ").Trim();
            }
        }
        else
        {
            if (param1.IsNullOrEmpty())
            {
                await telegramService.SendTextMessageAsync(
                    sendText : "Balas seseorang yang mau di ban",
                    scheduleDeleteAt : DateTime.UtcNow.AddMinutes(1),
                    includeSenderMessage : true
                    );

                return;
            }

            userId = param1.ToInt64();
            reason = message.Text;

            if (reason.IsNotNullOrEmpty())
            {
                reason = partedText.Skip(2).JoinStr(" ").Trim();
            }
        }

        Log.Information("Execute Global Ban");
        await telegramService.AppendTextAsync($"<b>Global Ban</b>", replyToMsgId : 0);

        await telegramService.AppendTextAsync($"Telegram UserId: <code>{userId}</code>");

        if (await telegramService.CheckFromAdmin(userId))
        {
            await telegramService.AppendTextAsync($"Tidak dapat melakukan Global Ban kepada Admin");

            return;
        }

        reason = reason.IsNullOrEmpty() ? "General SpamBot" : reason;

        var banData = new GlobalBanItem()
        {
            UserId     = userId,
            BannedBy   = fromId,
            BannedFrom = chatId,
            ReasonBan  = reason
        };

        var globalBanService = telegramService.GetRequiredService <GlobalBanService>();
        var eventLogService  = telegramService.GetRequiredService <EventLogService>();

        var isGlobalBanned = await globalBanService.IsExist(userId);

        if (isGlobalBanned)
        {
            await telegramService.AppendTextAsync(
                sendText : "Pengguna sudah di ban",
                scheduleDeleteAt : DateTime.UtcNow.AddMinutes(2),
                includeSenderMessage : true
                );

            return;
        }

        if (telegramService.ReplyToMessage?.ForwardFrom == null)
        {
            var messageId = telegramService.ReplyToMessage?.MessageId ?? -1;

            if (telegramService.ReplyToMessage == null)
            {
                messageId = -1;
            }
            else
            {
                await telegramService.KickMemberAsync(userId, untilDate : DateTime.Now.AddSeconds(30));// Kick and Unban after 8 hours
            }

            var messageLog = HtmlMessage.Empty
                             .TextBr("Global Ban di tambahkan baru")
                             .Bold("UserId: ").CodeBr(userId.ToString());

            await Task.WhenAll(
                eventLogService.SendEventLogAsync(
                    chatId: chatId,
                    message: message,
                    text: messageLog.ToString(),
                    forwardMessageId: messageId,
                    deleteForwardedMessage: true,
                    messageFlag: MessageFlag.GBan
                    )
                );
        }

        var save = await globalBanService.SaveBanAsync(banData);

        await telegramService.AppendTextAsync($"Alasan: {reason}");

        Log.Information("SaveBan: {Save}", save);

        await globalBanService.UpdateCache(userId);

        await telegramService.AppendTextAsync(
            sendText : "Pengguna berhasil di tambahkan",
            scheduleDeleteAt : DateTime.UtcNow.AddMinutes(2),
            includeSenderMessage : true
            );
    }
示例#21
0
    public override async Task HandleAsync(
        IUpdateContext context,
        UpdateDelegate next,
        string[] args
        )
    {
        await _telegramService.AddUpdateContext(context);

        var chatId = _telegramService.ChatId;
        var fromId = _telegramService.FromId;

        var messageTextParts = _telegramService.MessageTextParts;
        var word             = messageTextParts.ElementAtOrDefault(1) ?? string.Empty;
        var paramOption      = messageTextParts.ElementAtOrDefault(2) ?? string.Empty;

        var isGlobalBlock = false;

        var isSudoer = _telegramService.IsFromSudo;

        if (!isSudoer)
        {
            await _telegramService.DeleteSenderMessageAsync();

            Log.Information("Currently add Kata is limited only Sudo");
            return;
        }

        if (word.IsValidUrl())
        {
            word = word.ParseUrl().Path;
        }

        var where = new Dictionary <string, object>()
        {
            { "word", word }
        };

        if (paramOption.IsContains("-"))
        {
            if (paramOption.IsContains("g"))// Global
            {
                isGlobalBlock = true;
                await _telegramService.AppendTextAsync("Kata ini akan di blokir Global!");
            }
        }

        if (!paramOption.IsContains("g"))
        {
            @where.Add("chat_id", chatId);
        }

        if (!word.IsNotNullOrEmpty())
        {
            await _telegramService.SendTextMessageAsync("Apa kata yg mau di blok?");
        }
        else
        {
            var isExist = await _wordFilterService.IsExistAsync(@where);

            if (isExist)
            {
                await _telegramService.AppendTextAsync("Kata sudah di tambahkan");
            }
            else
            {
                await _telegramService.AppendTextAsync("Sedang menambahkan kata");

                await _wordFilterService.SaveWordAsync(new WordFilter()
                {
                    Word      = word,
                    ChatId    = chatId,
                    IsGlobal  = isGlobalBlock,
                    FromId    = fromId,
                    CreatedAt = DateTime.Now
                });

                await _telegramService.AppendTextAsync("Kata berhasil di tambahkan");

                await _wordFilterService.UpdateWordListsCache();
            }
        }

        await _telegramService.DeleteAsync(delay : 3000);
    }
示例#22
0
        public override async Task HandleAsync(IUpdateContext context, UpdateDelegate next, string[] args,
                                               CancellationToken cancellationToken)
        {
            _telegramService = new TelegramService(context);
            _rssService      = new RssService(_telegramService.Message);
            var chatId = _telegramService.Message.Chat.Id;

            var url = _telegramService.Message.Text.GetTextWithoutCmd();

            if (url != null)
            {
                await _telegramService.AppendTextAsync($"URL: {url}");

                if (url.CheckUrlValid())
                {
                    await _telegramService.AppendTextAsync($"Sedang mengecek apakah berisi RSS");

                    var isValid = await url.IsValidUrlFeed();

                    if (!isValid)
                    {
                        await _telegramService.AppendTextAsync("Sedang mencari kemungkinan tautan RSS yang valid");

                        var foundUrl = await url.GetBaseUrl().FindUrlFeed();

                        Log.Information($"Found URL Feed: {foundUrl}");

                        if (foundUrl != "")
                        {
                            url = foundUrl;
                        }
                        else
                        {
                            var notfoundRss = $"Kami tidak dapat memvalidasi {url} adalah Link RSS yang valid, " +
                                              $"dan mencoba mencari di {url.GetBaseUrl()} tetap tidak dapat menemukan.";

                            await _telegramService.EditAsync(notfoundRss);

                            return;
                        }
                    }

                    var isFeedExist = await _rssService.IsExistRssAsync(url);

                    Log.Information($"Is Url Exist: {isFeedExist}");

                    if (!isFeedExist)
                    {
                        await _telegramService.AppendTextAsync($"Sedang menyimpan..");

                        var data = new Dictionary <string, object>()
                        {
                            { "url_feed", url },
                            { "chat_id", _telegramService.Message.Chat.Id },
                            { "from_id", _telegramService.Message.From.Id }
                        };

                        await _rssService.SaveRssSettingAsync(data);

                        await _telegramService.AppendTextAsync("Memastikan Scheduler sudah berjalan");

                        chatId.RegisterScheduler();

                        await _telegramService.AppendTextAsync($"Tautan berhasil di simpan");
                    }
                    else
                    {
                        await _telegramService.AppendTextAsync($"Tautan sudah di simpan");
                    }
                }
                else
                {
                    await _telegramService.AppendTextAsync("Url tersebut sepertinya tidak valid");
                }
            }
            else
            {
                await _telegramService.SendTextAsync("Apa url Feednya?");
            }
        }
        public override async Task HandleAsync(IUpdateContext context, UpdateDelegate next, string[] args,
                                               CancellationToken cancellationToken)
        {
            _telegramService   = new TelegramService(context);
            _wordFilterService = new WordFilterService(context.Update.Message);

            var msg           = context.Update.Message;
            var cleanedMsg    = msg.Text.GetTextWithoutCmd();
            var partedMsg     = cleanedMsg.Split(" ");
            var paramOption   = partedMsg.ValueOfIndex(1) ?? "";
            var word          = partedMsg.ValueOfIndex(0);
            var isGlobalBlock = false;

            var isSudoer = _telegramService.IsSudoer();
            var isAdmin  = await _telegramService.IsAdminGroup()
                           .ConfigureAwait(false);

            if (!isSudoer && !isAdmin)
            {
                return;
            }

            if (word.IsValidUrl())
            {
                word = word.ParseUrl().Path;
            }

            var where = new Dictionary <string, object>()
            {
                { "word", word }
            };

            if (paramOption.IsContains("-"))
            {
                if (paramOption.IsContains("g") && isSudoer) // Global
                {
                    isGlobalBlock = true;
                    await _telegramService.AppendTextAsync("Kata ini akan di blokir Global!")
                    .ConfigureAwait(false);
                }

                if (paramOption.IsContains("d"))
                {
                }

                if (paramOption.IsContains("c"))
                {
                }
            }

            if (!paramOption.IsContains("g"))
            {
                @where.Add("chat_id", msg.Chat.Id);
            }

            if (!isSudoer)
            {
                await _telegramService.AppendTextAsync("Hanya Sudoer yang dapat memblokir Kata mode Group-wide!")
                .ConfigureAwait(false);
            }

            if (word.IsNotNullOrEmpty())
            {
                await _telegramService.AppendTextAsync("Sedang menambahkan kata")
                .ConfigureAwait(false);

                var isExist = await _wordFilterService.IsExistAsync(@where)
                              .ConfigureAwait(false);

                if (!isExist)
                {
                    var save = await _wordFilterService.SaveWordAsync(word, isGlobalBlock)
                               .ConfigureAwait(false);

                    await _telegramService.AppendTextAsync("Kata berhasil di tambahkan")
                    .ConfigureAwait(false);
                }
                else
                {
                    await _telegramService.AppendTextAsync("Kata sudah di tambahkan")
                    .ConfigureAwait(false);
                }
            }
            else
            {
                await _telegramService.SendTextAsync("Apa kata yg mau di blok?")
                .ConfigureAwait(false);
            }

            await _telegramService.DeleteAsync(delay : 3000)
            .ConfigureAwait(false);
        }
示例#24
0
    public override async Task HandleAsync(
        IUpdateContext context,
        UpdateDelegate next,
        string[] args
        )
    {
        await _telegramService.AddUpdateContext(context);

        var msg      = _telegramService.Message;
        var msgId    = msg.MessageId;
        var chatId   = _telegramService.ChatId;
        var fromId   = _telegramService.FromId;
        var dateDate = DateTime.UtcNow.ToString("yyyy-MM-dd");

        if (!await _telegramService.CheckUserPermission())
        {
            var send = "Maaf, hanya Admin yang dapat mengimport daftar RSS";
            await _telegramService.SendTextMessageAsync(send);

            return;
        }

        await _telegramService.AppendTextAsync("Sedang mempersiapkan");

        var filePath = $"{chatId}/rss-feed_{dateDate}_{msgId}";

        filePath = await _telegramService.DownloadFileAsync(filePath);

        await _telegramService.AppendTextAsync("Sedang membuka berkas");

        var rssLists = await File.ReadAllLinesAsync(filePath);

        foreach (var rssList in rssLists)
        {
            Log.Information("Importing {RssList}", rssList);

            var data = new Dictionary <string, object>()
            {
                { "url_feed", rssList },
                { "chat_id", chatId },
                { "from_id", fromId }
            };

            await _rssService.SaveRssSettingAsync(data);
        }

        await _telegramService.AppendTextAsync($"Memeriksa RSS duplikat");

        var dedupe = await _rssService.DeleteDuplicateAsync();

        await _telegramService.AppendTextAsync("Memastikan RSS Scheduler berjalan");

        _rssFeedService.ReRegisterRssFeedByChatId(chatId);

        var importCount = rssLists.Length;

        if (dedupe != importCount)
        {
            var diff = importCount - dedupe;
            await _telegramService.AppendTextAsync($"{diff} RSS berhasil di import");
        }
        else
        {
            await _telegramService.AppendTextAsync($"RSS telah di import");
        }
    }
示例#25
0
    public override async Task HandleAsync(
        IUpdateContext context,
        UpdateDelegate next,
        string[] args
        )
    {
        await _telegramService.AddUpdateContext(context);

        await _telegramService.DeleteSenderMessageAsync();

        if (!await _telegramService.CheckFromAdminOrAnonymous())
        {
            return;
        }

        var kickTargets = new List <User>();

        var msg    = _telegramService.Message;
        var fromId = _telegramService.FromId;

        kickTargets.Add(msg.From);

        if (msg.ReplyToMessage != null)
        {
            kickTargets.Clear();

            var repMsg = msg.ReplyToMessage;
            kickTargets.Add(repMsg.From);

            if (repMsg.NewChatMembers != null)
            {
                kickTargets.AddRange(repMsg.NewChatMembers);
            }
        }

        var containFromId = kickTargets.Where
                            (
            (
                user,
                i
            ) => user.Id == fromId
                            ).Any();

        if (!containFromId)
        {
            Log.Warning("No privilege for execute this command!");
            return;
        }

        var sbKickResult = new StringBuilder($"Sedang menendang {kickTargets.Count} pengguna..");

        sbKickResult.AppendLine();

        foreach (var userId in kickTargets.Select(kickTarget => kickTarget.Id))
        {
            var isKicked = await _telegramService.KickMemberAsync(userId, true);

            if (isKicked)
            {
                sbKickResult.Append($"{userId} berhasil di tendang ");
                sbKickResult.AppendLine(userId == fromId ? $"oleh Self-kick" : "");
            }
            else
            {
                sbKickResult.AppendLine($"Gagal menendang {userId}");
            }
        }

        await _telegramService.AppendTextAsync(sbKickResult.ToTrimmedString());
    }