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

        var fromNameLink = _telegramService.FromNameLink;
        var fromId       = _telegramService.FromId;
        var chatId       = _telegramService.ChatId;
        var afkReason    = _telegramService.MessageOrEditedText.GetTextWithoutCmd();

        if (_telegramService.CheckFromAnonymous() ||
            _telegramService.CheckSenderChannel())
        {
            await _telegramService.SendTextMessageAsync("Mode AFK dimatikan untuk Pengguna Anonymous");

            return;
        }

        var settings = await _settingsService.GetSettingsByGroup(chatId);

        if (!settings.EnableAfkStatus)
        {
            await _telegramService.DeleteSenderMessageAsync();

            return;
        }

        var data = new Dictionary <string, object>()
        {
            { "user_id", fromId },
            { "chat_id", chatId },
            { "is_afk", 1 },
            { "afk_start", DateTime.Now },
            { "afk_end", DateTime.Now }
        };

        var sendText = $"{fromNameLink} Sedang afk.";

        if (afkReason.IsNotNullOrEmpty())
        {
            data.Add("afk_reason", afkReason);

            sendText += $"\n<i>{afkReason}</i>";
        }

        await _telegramService.SendTextMessageAsync(sendText);

        await _afkService.SaveAsync(data);

        await _afkService.UpdateAfkByIdCacheAsync(fromId);
    }
    public static async Task <AntiSpamResult> AntiSpamCheckAsync(this TelegramService telegramService)
    {
        var fromId = telegramService.FromId;
        var chatId = telegramService.ChatId;

        var defaultResult = new AntiSpamResult
        {
            UserId        = fromId,
            MessageResult = string.Empty,
            IsAnyBanned   = false,
            IsEs2Banned   = false,
            IsCasBanned   = false,
            IsSpamWatched = false
        };

        if (telegramService.IsPrivateChat ||
            telegramService.MessageOrEdited == null ||
            telegramService.CheckFromAnonymous() ||
            telegramService.CheckSenderChannel())
        {
            return(defaultResult);
        }

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

        var message = telegramService.MessageOrEdited;

        var antiSpamResult = await telegramService.AntiSpamService.CheckSpam(chatId, fromId);

        if (antiSpamResult == null)
        {
            return(null);
        }

        var messageBan = antiSpamResult.MessageResult;

        if (!antiSpamResult.IsAnyBanned)
        {
            return(antiSpamResult);
        }

        await Task.WhenAll(
            telegramService.KickMemberAsync(
                userId: fromId,
                unban: false,
                untilDate: DateTime.Now.AddMinutes(1)
                ),
            telegramService.SendTextMessageAsync(
                sendText: messageBan,
                replyToMsgId: 0,
                disableWebPreview: true,
                scheduleDeleteAt: DateTime.UtcNow.AddDays(1),
                preventDuplicateSend: true,
                messageFlag: MessageFlag.GBan
                ),
            telegramService.EventLogService.SendEventLogAsync(
                text: messageBan,
                chatId: chatId,
                message: message,
                messageFlag: MessageFlag.GBan,
                forwardMessageId: message.MessageId,
                deleteForwardedMessage: true
                )
            );

        await telegramService.DeleteMessageManyAsync();

        return(antiSpamResult);
    }