Ejemplo n.º 1
0
    public async Task <int> ImportFile(
        string fileName,
        GlobalBanItem globalBan
        )
    {
        var reader = fileName.ReadCsv <CommonGlobalBanItem>();

        var gbanMaps = reader.Select
                       (
            item => new GlobalBanItem()
        {
            UserId     = item.UserId,
            BannedBy   = globalBan.BannedBy,
            BannedFrom = globalBan.BannedFrom,
            ReasonBan  = globalBan.ReasonBan,
            CreatedAt  = DateTime.Now
        }
                       ).ToList();

        var deleteRows = await _queryService
                         .CreateMySqlFactory()
                         .FromTable(GBanTable)
                         .WhereIn("user_id", gbanMaps.Select(x => x.UserId))
                         .DeleteAsync();

        var insertRows = await _queryService
                         .CreateMySqlFactory()
                         .FromTable(GBanTable)
                         .InsertAsync
                         (
            columns: new[]
        {
            "user_id", "from_id", "chat_id", "reason", "created_at"
        },
            valuesCollection: gbanMaps.Select
            (
                item => new object[]
        {
            item.UserId, item.BannedBy, item.BannedFrom, item.ReasonBan, item.CreatedAt
        }
            )
                         );

        var diff = insertRows - deleteRows;

        return(diff);
    }
Ejemplo n.º 2
0
    /// <summary>
    /// Saves the ban async.
    /// </summary>
    /// <param name="globalBanItem">The global ban data.</param>
    /// <returns>A Task.</returns>
    public async Task <bool> SaveBanAsync(GlobalBanItem globalBanItem)
    {
        var userId = globalBanItem.UserId;
        var fromId = globalBanItem.BannedBy;
        var chatId = globalBanItem.BannedFrom;
        var reason = globalBanItem.ReasonBan;

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

        Log.Information("Inserting new GBan: {@V}", globalBanItem);

        var query = await _queryService
                    .CreateMySqlFactory()
                    .FromTable(GBanTable)
                    .InsertAsync(data);

        return(query > 0);
    }
    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
            );
    }