Exemplo n.º 1
0
        /// <summary>
        /// Сканировать входящий Telegram.Update
        /// </summary>
        public void UpdateNew()
        {
            if (IncUpdate is null)
            {
                return;
            }
            ScanSpamMatches  = new List <SpamMatch>();
            ChatAdmins       = new List <ChatMemberClass>();
            CompositionTypes = new List <TelegramDataTypes>();

            #region Определение типа чата
            ChatType = ChatTypes.Error;
            foreach (ChatTypes c in Enum.GetValues(typeof(ChatTypes)))
            {
                if (c.ToString("g").ToLower() == IncUpdate.message.chat.type.ToLower())
                {
                    ChatType = c;
                    break;
                }
            }
            #endregion

            ////////////////////////////////////////////////////////
            #region Если сообщение из группы или супергруппы, то определяем администраторов чата
            if ((ChatType == ChatTypes.Group || ChatType == ChatTypes.Supergroup) && ChatAdmins.Count == 0)
            {
                ChatMemberClass[] chat_admins = telegram_client.getChatAdministrators(IncUpdate.message.chat.id.ToString());
                if (!(chat_admins is null))
                {
                    ChatAdmins.AddRange(chat_admins.Where(x => !x.user.is_bot));
                }
            }
            #endregion

            #region Определение состава данных сообщения
            if (!(IncUpdate.message is null))
            {
                if (!string.IsNullOrEmpty(IncUpdate.message.text))
                {
                    CompositionTypes.Add(TelegramDataTypes.Text);
                    if (Regex.IsMatch(IncUpdate.message.text, @"^\s*\d{1,2}\.\d{1,6}\s*,\s*d{1,2}\.\d{1,6}\s*$"))
                    {
                        CompositionTypes.Add(TelegramDataTypes.LocationText);
                    }
                }
                if (!string.IsNullOrEmpty(IncUpdate.message.caption))
                {
                    CompositionTypes.Add(TelegramDataTypes.Caption);
                }

                if (!(IncUpdate.message.new_chat_members is null))
                {
                    CompositionTypes.Add(TelegramDataTypes.NewChatMembers);
                }

                if (!(IncUpdate.message.location is null))
                {
                    CompositionTypes.Add(TelegramDataTypes.Location);
                }

                if (!(IncUpdate.message.photo is null))
                {
                    CompositionTypes.Add(TelegramDataTypes.Photo);
                }

                if (!(IncUpdate.message.document is null))
                {
                    CompositionTypes.Add(TelegramDataTypes.Document);
                }

                if (!(IncUpdate.message.video is null))
                {
                    CompositionTypes.Add(TelegramDataTypes.Video);
                }
            }

            #endregion

            if (ChatType == ChatTypes.Private && !string.IsNullOrEmpty(IncUpdate.message.text))
            {
                TelegramCommand = new TelegramCommandClass(IncUpdate.message.text);
            }
            else
            if (ChatType == ChatTypes.Group || ChatType == ChatTypes.Supergroup)
            {
                #region Если это группа/чат
                Log.WriteLine("Сканирование сообщения на спам");

                SpamScanner scanMessage = new SpamScanner(this);
                ScanSpamMatches = scanMessage.scan_matches;
                #endregion
            }
        }