Esempio n. 1
0
    private void LoadData()
    {
        ChatSetting setting = ChatSettings.GetSetting(UserSession.LoginUser, _organizationID);

        if (setting == null)
        {
            return;
        }

        imgAvailable.ImageUrl   = String.Format("../dc/{0}/images/chat/chat_available", _organizationID.ToString());
        imgUnavailable.ImageUrl = String.Format("../dc/{0}/images/chat/chat_unavailable", _organizationID.ToString());
        imgLogo.ImageUrl        = String.Format("../dc/{0}/images/chat/chat_logo", _organizationID.ToString());

        textChatIntro.Text = Settings.OrganizationDB.ReadString("ChatIntroMessage", "Welcome to our live chat!");

        if (UserSession.LoginUser.GetOrganization().ProductType != ProductType.HelpDesk)
        {
            cbChatTOKScreenEnabled.Checked = Settings.OrganizationDB.ReadBool("ChatTOKScreenEnabled", false);
            cbChatTOKVoiceEnabled.Checked  = Settings.OrganizationDB.ReadBool("ChatTOKVoiceEnabled", false);
            cbChatTOKVideoEnabled.Checked  = Settings.OrganizationDB.ReadBool("ChatTOKVideoEnabled", false);
        }
        else
        {
            cbChatTOKScreenEnabled.Enabled = false;
            cbChatTOKVoiceEnabled.Enabled  = false;
            cbChatTOKVideoEnabled.Enabled  = false;
        }

        cbChatTicketDeflectionEnabled.Checked = Settings.OrganizationDB.ReadBool("ChatTicketDeflectionEnabled", false);
        cbChatAvatars.Checked = Settings.OrganizationDB.ReadBool("ChatAvatarsEnabled", false);
    }
Esempio n. 2
0
        public static string GetChatSetting(RestCommand command, int organizationID)
        {
            ChatSetting chatSetting = ChatSettings.GetChatSetting(command.LoginUser, organizationID);

            if (chatSetting.OrganizationID != command.Organization.OrganizationID)
            {
                throw new RestException(HttpStatusCode.Unauthorized);
            }
            return(chatSetting.GetXml("ChatSetting", true));
        }
Esempio n. 3
0
    public async Task <NewChatMembers> CheckNewChatMembers(
        long chatId,
        User[] users,
        Func <CallbackAnswer, Task <CallbackResult> > funcCallbackAnswer
        )
    {
        _chatSetting = await _settingsService.GetSettingsByGroup(chatId);

        var newChatMembers = new NewChatMembers
        {
            AllNewChatMembers = users.AsEnumerable()
        };

        _logger.LogDebug("Parsing new {Length} members..", users.Length);
        foreach (var user in users)
        {
            var callbackAnswerParam = new CallbackAnswer();
            var userId = user.Id;

            var banResult = await _antiSpamService.CheckSpam(chatId, userId);

            callbackAnswerParam.TargetUserId = userId;

            if (banResult.IsAnyBanned)
            {
                newChatMembers.NewKickedChatMembers.Add(user);
                callbackAnswerParam.CallbackAnswerModes.Add(CallbackAnswerMode.KickMember);
            }
            else
            {
                if (_chatSetting.EnableHumanVerification)
                {
                    newChatMembers.NewPassedChatMembers.Add(user);
                    callbackAnswerParam.CallbackAnswerModes.Add(CallbackAnswerMode.MuteMember);
                    callbackAnswerParam.CallbackAnswerModes.Add(CallbackAnswerMode.ScheduleKickMember);
                }

                newChatMembers.NewPassedChatMembers.Add(user);
            }

            await funcCallbackAnswer(callbackAnswerParam);
        }

        newChatMembers.AllNewChatMembersStr    = users.Select(user => user.GetNameLink());
        newChatMembers.NewPassedChatMembersStr = newChatMembers.NewPassedChatMembers.Select(user => user.GetNameLink());

        newChatMembers.NewNoUsernameChatMembers    = users.Where(user => user.Username.IsNullOrEmpty());
        newChatMembers.NewNoUsernameChatMembersStr = newChatMembers.NewNoUsernameChatMembers.Select(user => user.GetNameLink());

        newChatMembers.NewBotChatMembers    = users.Where(user => user.IsBot);
        newChatMembers.NewBotChatMembersStr = newChatMembers.NewBotChatMembers.Select(user => user.GetNameLink());

        return(newChatMembers);
    }
Esempio n. 4
0
        public async Task <bool> InsertIfNotFoundAsync(string chatId, ChatSetting chatSetting)
        {
            var found = _lineDB.Find(context => context.ChatId == chatId).FirstOrDefault();

            if (found == null)
            {
                await _lineDB.InsertOneAsync(chatSetting);

                return(true);
            }
            return(false);
        }
        public async Task NewMember()
        {
            Log.Debug(
                "New Members on ChatId {Id} arrived: {@NewChatMembers}",
                Chat.Id,
                RawUpdate.Message.NewChatMembers
                );

            _settings = await _settingsService.GetSettingsByGroup(Chat.Id);

            if (!_settings.EnableWelcomeMessage)
            {
                Log.Information("Welcome Message is disabled on ChatId {Id}", Chat.Id);
                return;
            }

            var welcomeButton = _settings.WelcomeButton;

            var newMembers   = RawUpdate.Message.NewChatMembers;
            var passedMember = await ScanMembersAsync(Chat.Id, newMembers);

            if (passedMember.Count < 1)
            {
                Log.Information("Welcome Message is disabled because no member passed!");
                return;
            }

            var messageText = await BuildWelcomeMessage(passedMember);

            var replyMarkup = _settings.WelcomeButton.ToReplyMarkup();

            if (_settings.EnableHumanVerification)
            {
                Log.Information("Human verification is enabled!");
                Log.Information("Adding verify button..");

                var userId = newMembers[0].Id;
                // var verifyButton = $"Saya Manusia!|verify {userId}";
                var verifyButton = $"Saya Manusia!|human-verify";

                var withVerifyArr = new[] { welcomeButton, verifyButton };
                var withVerify    = string.Join(",", withVerifyArr);

                replyMarkup = withVerify.ToReplyMarkup(2);
            }

            // var htmlMsg = new HtmlBuilder()
            // .TextBr("");

            await SendMessageTextAsync(messageText, replyMarkup : replyMarkup);
        }
Esempio n. 6
0
        private void RegisterChatKeybind(ChatSetting chat)
        {
            if (string.IsNullOrEmpty(chat.Key))
            {
                return;
            }

            var accelerator = keyboardProvider.ToElectronAccelerator(chat.Key);

            if (string.IsNullOrEmpty(accelerator))
            {
                return;
            }

            ElectronNET.API.Electron.GlobalShortcut.Register(accelerator, GetChatKeybindAction(accelerator, chat));
        }
Esempio n. 7
0
        public async Task <bool> OnUpdate()
        {
            var sw = Stopwatch.StartNew();

            _logger.LogDebug("New Update: {@RawUpdate}", RawUpdate);

            _chatSetting = await _settingsService.GetSettingsByGroup(ChatId);

            var checkAntiSpamTask    = CheckAntiSpam();
            var checkScanMessageTask = CheckScanMessageAsync();
            var checkMentionTask     = CheckMention();
            var checkRestrictionTask = CheckChatRestricted();
            var fireMessageTask      = CheckFireMessage();

            await Task.WhenAll(
                checkAntiSpamTask,
                checkScanMessageTask,
                fireMessageTask,
                checkRestrictionTask
                );

            var checkAntiSpam    = await checkAntiSpamTask;
            var checkScanMessage = await checkScanMessageTask;
            var checkMention     = await checkMentionTask;
            var checkRestriction = await checkRestrictionTask;
            var fireMessageCheck = await fireMessageTask;

            _logger.LogDebug(
                "User {@From} has No Username? {NoUsername}",
                From.ToString(),
                NoUsername
                );

            var shouldNext = !checkAntiSpam.IsAnyBanned && !checkRestriction && HasUsername;

            _logger.LogDebug(
                "Should to Next handler? {ShouldNext}. Elapsed. {Elapsed}",
                shouldNext,
                sw.Elapsed
                );
            sw.Stop();

            return(shouldNext);
        }
Esempio n. 8
0
        private Action GetChatKeybindAction(string accelerator, ChatSetting chat)
        {
            return(() =>
            {
                ElectronNET.API.Electron.GlobalShortcut.Unregister(accelerator);
                Thread.Sleep(1);

                var handler = serviceProvider.GetService <ChatKeybindHandler>();
                if (handler.IsValid())
                {
                    Task.Run(() => handler.Execute(chat.Command, chat.Submit));
                }
                else
                {
                    keyboardProvider.PressKey(chat.Key);
                }

                ElectronNET.API.Electron.GlobalShortcut.Register(accelerator, GetChatKeybindAction(accelerator, chat));
            });
        }
Esempio n. 9
0
    private void LoadChat(int organzationID)
    {
        Organization organization = Organizations.GetOrganization(UserSession.LoginUser, UserSession.LoginUser.OrganizationID);

        ChatSetting   setting = ChatSettings.GetSetting(UserSession.LoginUser, organzationID);
        StringBuilder builder = new StringBuilder();

        //builder.Append("<table cellpadding=\"0\" cellspacing=\"5\" border=\"0\">");
        //builder.Append("<tr>");
        //builder.Append("<td>Available Image:</td>");
        builder.Append("<div><strong>Customer Chat Link:</strong></div>");
        builder.Append("<div>");
        string script = string.Format("window.open('{1}/Chat/ChatInit.aspx?uid={0}', 'TSChat', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,copyhistory=no,resizable=no,width=450,height=575'); return false;", organization.ChatID.ToString(), SystemSettings.GetAppUrl());

        string link = string.Format("<a href=\"#\" onclick=\"{0}\"><img src=\"{2}/dc/{1}/chat/image\" border=\"0\" /></a>", script, organization.OrganizationID, SystemSettings.GetAppUrl());

        textChatCode.Text = link;
        builder.Append(string.Format("<a href=\"#\" onclick=\"{0}\">Test</a>", script));
        builder.Append("</div>");
        divChatProperties.InnerHtml = builder.ToString();
    }
Esempio n. 10
0
        private void UpdateUserSetting(PublicMessageEventArgs e, string settingKey, string settingValue)
        {
            var coll = DB.GetCollection <ChatSetting>();
            var kvp  = coll.Find(x => x.ChatID == e.Message.Chat.ID && x.Key == settingKey).FirstOrDefault();

            if (null == kvp)
            {
                kvp = new ChatSetting
                {
                    ChatID = e.Message.Chat.ID,
                    Key    = settingKey,
                    Value  = settingValue,
                };
                coll.Insert(kvp);
            }
            else
            {
                kvp.Value = settingValue;
                coll.Update(kvp);
            }
        }
Esempio n. 11
0
        public MsgGreet(LiplisTone Tone, ChatSetting chat, int AllocationId)
        {
            try
            {
                this.message = new MsgTopic(Tone, chat.sentence, chat.sentence, chat.GetEmotion(), chat.GetEmotion(), true, AllocationId);

                //Chatに設定があれば、時間範囲を設定する
                if (chat.rangeStart != "" || chat.rangeEnd != "")
                {
                    //スタート時刻をセット
                    string[] start = chat.rangeStart.Split(':');
                    this.SrtTime = DateUtil.CreateDatetime(int.Parse(start[0]), int.Parse(start[1]), 0);

                    //終了時刻をセット
                    string[] end = chat.rangeEnd.Split(':');
                    this.EndTime = DateUtil.CreateDatetime(int.Parse(end[0]), int.Parse(end[1]), 0);
                }
            }
            catch
            {
                //エラーでも処理を継続
            }
        }
Esempio n. 12
0
 public object this[long chatId, ChatSetting key]
 {
     //get => GetValueOrDefault<object>(chatId + key, null);
     set => AddOrUpdateValue(ConvertToKey(chatId, key), value);
Esempio n. 13
0
    /// <summary>
    /// Checks the spam.
    /// </summary>
    /// <param name="chatId"></param>
    /// <param name="userId">The user id.</param>
    /// <param name="funcAntiSpamResult"></param>
    /// <returns>A Task.</returns>
    public async Task <AntiSpamResult> CheckSpam(
        long chatId,
        long userId,
        Func <AntiSpamResult, Task> funcAntiSpamResult = null
        )
    {
        var spamResult = new AntiSpamResult
        {
            UserId = userId
        };

        var isIgnored = _chatService.CheckUserIdIgnored(userId);

        if (isIgnored)
        {
            return(spamResult);
        }

        _chatSetting = await _settingsService.GetSettingsByGroup(chatId);

        var getChatMemberTask  = _chatService.GetChatMemberAsync(chatId, userId);
        var checkSpamWatchTask = CheckSpamWatch(userId);
        var checkCasBanTask    = CheckCasBan(userId);
        var checkEs2BanTask    = CheckEs2Ban(userId);

        await Task.WhenAll(
            checkSpamWatchTask,
            checkCasBanTask,
            checkEs2BanTask,
            getChatMemberTask
            );

        var chatMember = getChatMemberTask.Result;
        var swBan      = checkSpamWatchTask.Result;
        var casBan     = checkCasBanTask.Result;
        var es2Ban     = checkEs2BanTask.Result;
        var anyBan     = swBan || casBan || es2Ban;

        if (!anyBan)
        {
            Log.Information("UserId {UserId} is passed on all Fed Ban", userId);
            return(spamResult);
        }

        var banMessage = _localizationService.GetLoc(
            langCode: _chatSetting.LanguageCode,
            enumPath: GlobalBan.BanMessage,
            placeHolders: new List <(string placeholder, string value)>()
        {
            ("UserId", userId.ToString()),
            ("FullName", chatMember.User.GetNameLink())
        }
            );

        var htmlMessage = HtmlMessage.Empty
                          .TextBr(banMessage);

        if (es2Ban)
        {
            htmlMessage.Url("https://t.me/WinTenDev", "- ES2 Global Ban").Br();
        }
        if (casBan)
        {
            htmlMessage.Url($"https://cas.chat/query?u={userId}", "- CAS Fed").Br();
        }
        if (swBan)
        {
            htmlMessage.Url("https://t.me/SpamWatchSupport", "- SpamWatch Fed");
        }

        spamResult = new AntiSpamResult()
        {
            MessageResult = htmlMessage.ToString(),
            IsAnyBanned   = anyBan,
            IsEs2Banned   = es2Ban,
            IsCasBanned   = casBan,
            IsSpamWatched = swBan
        };

        if (funcAntiSpamResult != null)
        {
            await funcAntiSpamResult(spamResult);
        }

        Log.Debug("AntiSpam Result {@Result}", spamResult);

        return(spamResult);
    }
        public async Task HandleAsync(IUpdateContext context, UpdateDelegate next, CancellationToken cancellationToken)
        {
            var msg = context.Update.Message;

            _telegramService  = new TelegramService(context);
            _settingsService  = new SettingsService(msg);
            _globalBanService = new GlobalBanService(context.Update.Message);
            await _telegramService.DeleteAsync(msg.MessageId)
            .ConfigureAwait(false);

            Log.Information("New Chat Members...");

            var chatSettings = _telegramService.CurrentSetting;

            Settings = chatSettings;

            if (!chatSettings.EnableWelcomeMessage)
            {
                Log.Information("Welcome message is disabled!");
                return;
            }

            var newMembers  = msg.NewChatMembers;
            var isBootAdded = await newMembers.IsBotAdded().ConfigureAwait(false);

            if (isBootAdded)
            {
                var isRestricted = await _telegramService.EnsureChatRestrictionAsync()
                                   .ConfigureAwait(false);

                if (isRestricted)
                {
                    return;
                }

                var botName  = BotSettings.GlobalConfiguration["Engines:ProductName"];
                var sendText = $"Hai, perkenalkan saya {botName}" +
                               $"\nFYI saya di bangun ulang menggunakan .NET." +
                               $"\n\nAku adalah bot pendebug dan grup manajemen yang di lengkapi dengan alat keamanan. " +
                               $"Agar saya berfungsi penuh, jadikan saya admin dengan level standard. " +
                               $"\n\nAku akan menerapkan konfigurasi standard jika aku baru pertama kali masuk kesini. " +
                               $"\n\nUntuk melihat daftar perintah bisa ketikkan /help";

                await _telegramService.SendTextAsync(sendText).ConfigureAwait(false);

                await _settingsService.SaveSettingsAsync(new Dictionary <string, object>()
                {
                    { "chat_id", msg.Chat.Id },
                    { "chat_title", msg.Chat.Title }
                }).ConfigureAwait(false);

                if (newMembers.Length == 1)
                {
                    return;
                }
            }

            var parsedNewMember = await ParseMemberCategory(newMembers).ConfigureAwait(false);

            var allNewMember  = parsedNewMember.AllNewMember;
            var allNoUsername = parsedNewMember.AllNoUsername;
            var allNewBot     = parsedNewMember.AllNewBot;

            if (allNewMember.Length > 0)
            {
                var chatTitle   = msg.Chat.Title;
                var greet       = Time.GetTimeGreet();
                var memberCount = await _telegramService.GetMemberCount()
                                  .ConfigureAwait(false);

                var newMemberCount = newMembers.Length;

                Log.Information("Preparing send Welcome..");

                if (chatSettings.WelcomeMessage.IsNullOrEmpty())
                {
                    chatSettings.WelcomeMessage = $"Hai {allNewMember}" +
                                                  $"\nSelamat datang di kontrakan {chatTitle}" +
                                                  $"\nKamu adalah anggota ke-{memberCount}";
                }

                var sendText = chatSettings.WelcomeMessage.ResolveVariable(new
                {
                    allNewMember,
                    allNoUsername,
                    allNewBot,
                    chatTitle,
                    greet,
                    newMemberCount,
                    memberCount
                });

                InlineKeyboardMarkup keyboard = null;
                if (!chatSettings.WelcomeButton.IsNullOrEmpty())
                {
                    keyboard = chatSettings.WelcomeButton.ToReplyMarkup(2);
                }

                if (chatSettings.EnableHumanVerification)
                {
                    Log.Information("Human verification is enabled!");
                    Log.Information("Adding verify button..");

                    var userId       = newMembers[0].Id;
                    var verifyButton = $"Saya Manusia!|verify {userId}";

                    var withVerifyArr = new string[] { chatSettings.WelcomeButton, verifyButton };
                    var withVerify    = string.Join(",", withVerifyArr);

                    keyboard = withVerify.ToReplyMarkup(2);
                }

                var prevMsgId = chatSettings.LastWelcomeMessageId.ToInt();


                var sentMsgId = -1;

                if (chatSettings.WelcomeMediaType != MediaType.Unknown)
                {
                    var mediaType = (MediaType)chatSettings.WelcomeMediaType;
                    sentMsgId = (await _telegramService.SendMediaAsync(
                                     chatSettings.WelcomeMedia,
                                     mediaType,
                                     sendText,
                                     keyboard).ConfigureAwait(false)).MessageId;
                }
                else
                {
                    sentMsgId = (await _telegramService.SendTextAsync(sendText, keyboard)
                                 .ConfigureAwait(false)).MessageId;
                }

                if (!chatSettings.EnableHumanVerification)
                {
                    await _telegramService.DeleteAsync(prevMsgId).ConfigureAwait(false);
                }

                await _settingsService.SaveSettingsAsync(new Dictionary <string, object>()
                {
                    { "chat_id", msg.Chat.Id },
                    { "chat_title", msg.Chat.Title },
                    { "members_count", memberCount },
                    { "last_welcome_message_id", sentMsgId }
                }).ConfigureAwait(false);

                await _settingsService.UpdateCache().ConfigureAwait(false);
            }
            else
            {
                Log.Information("Welcome Message ignored because User is Global Banned.");
            }
        }
Esempio n. 15
0
 public async Task Update(string chatId, ChatSetting chatSetting) =>
 await _lineDB.ReplaceOneAsync(context => context.ChatId == chatId, chatSetting);
Esempio n. 16
0
 public async Task InsertAsync(ChatSetting chatSetting) =>
 await _lineDB.InsertOneAsync(chatSetting);