Exemple #1
0
        // Обработка приходящих сообщений
        private void Vk_MessageReceived(object sender, MessageEventArgs e)
        {
            // Добавление в Users, если отсутствует
            if (!Users.Contains(e.Message.Id))
            {
                Task.Delay(300).Wait();
                var name = vk.GetUsername(e.Message.Id);
                if (name != null)
                {
                    Users.AddUser(e.Message.Id, name, null);
                }
            }

            // Вызов события о новом сообщении
            MessageReceived?.Invoke(this, e);

            // Пинаем каждый модуль чтоб он обработал сообщения
            for (int i = 0; i < Extensions.Length; i++)
            {
                var extension = Extensions[i];

                // Скипаем выключенные модули
                if (!extension.Enabled)
                {
                    continue;
                }

                // Передаём модулям сообщения для обработки
                MessageProcessing?.Invoke(this, new MessageProcessedEventArgs(extension));
                var res = extension.ProcessMessage(e.Message.Id, e.Message.Text);
                // Логирование и остановка обработки
                if (res == ProcessResult.Processed)
                {
                    MessageProcessed?.Invoke(this, new MessageProcessedEventArgs(extension));
                    if (extension.StopAfterProcessed)
                    {
                        ExtensionStopProcessing?.Invoke(this, new MessageProcessedEventArgs(extension));
                        return;
                    }
                }
                else if (res == ProcessResult.Skipped)
                {
                    MessageSkipped?.Invoke(this, new MessageProcessedEventArgs(extension));
                }
            }
        }