コード例 #1
0
        private async ValueTask <TResult> InvokeEvent <T, TResult>(EventCallBackHandler <T, TResult> handler, T args,
                                                                   IOneBotApi api, string rawMsg)
            where T : System.EventArgs where TResult : BaseEventReturn
        {
            TResult replay = null;

            foreach (var @delegate in handler.GetInvocationList())
            {
                var func = (EventCallBackHandler <T, TResult>)@delegate;
                var code = 0;
                try
                {
                    var result = await func(args, api);

                    if (result == null)
                    {
                        continue;
                    }
                    replay = result;
                    code   = result.Code;
                }
                catch (Exception e)
                {
                    _logger.LogError(e, "消息处理出现未知错误:{Msg}", rawMsg);
                }

                if (code == 1)
                {
                    break;
                }
            }

            return(replay);
        }
コード例 #2
0
        /// <summary>
        /// 事件分发
        /// </summary>
        /// <param name="messageJson">消息json对象</param>
        /// <param name="oneBotApi">客户端链接接口</param>
        /// <param name="rawMsg"></param>
        internal async ValueTask <object> Adapter(JObject messageJson, IOneBotApi oneBotApi, string rawMsg)
        {
            var type = GetBaseEventType(messageJson);

            try
            {
                switch (type)
                {
                //元事件类型
                case "meta_event":
                    await MetaAdapter(messageJson, oneBotApi, rawMsg);

                    break;

                case "message":
                    return(await MessageAdapter(messageJson, oneBotApi, rawMsg));

                default:
                    _logger.LogWarning("[Event]接收到未知事件[{Msg}]", rawMsg);
                    break;
                }
            }
            catch (Exception e)
            {
                _logger.LogError(e, "[Adapter]事件解析出现未知错误:{Msg}", rawMsg);
            }

            return(null);
        }
コード例 #3
0
        /// <summary>
        /// 消息事件处理和分发
        /// </summary>
        /// <param name="messageJson">消息</param>
        /// <param name="oneBotApi">客户端链接接口</param>
        /// <param name="rawMsg"></param>
        private async ValueTask <object> MessageAdapter(JObject messageJson, IOneBotApi oneBotApi, string rawMsg)
        {
            var type = GetMessageType(messageJson);

            switch (type)
            {
            //私聊事件
            case "private":
            {
                var privateMsg = messageJson.ToObject <PrivateMsgEventArgs>();
                if (privateMsg != null && OnPrivateMessage != null)
                {
                    return(await InvokeEvent(OnPrivateMessage, privateMsg, oneBotApi, rawMsg));
                }
                break;
            }

            //群聊事件
            case "group":
            {
                var groupMsg = messageJson.ToObject <GroupMsgEventArgs>();
                if (groupMsg != null && OnGroupMessage != null)
                {
                    return(await InvokeEvent(OnGroupMessage, groupMsg, oneBotApi, rawMsg));
                }
                break;
            }

            default:
                _logger.LogWarning("[Message Event]接收到未知事件[{MessageEventType}]", type);
                break;
            }

            return(null);
        }
コード例 #4
0
        /// <summary>
        /// 元事件处理和分发
        /// </summary>
        /// <param name="messageJson">消息</param>
        /// <param name="oneBotApi">客户端链接接口</param>
        /// <param name="rawMsg"></param>
        private async ValueTask MetaAdapter(JObject messageJson, IOneBotApi oneBotApi, string rawMsg)
        {
            var type = GetMetaEventType(messageJson);

            switch (type)
            {
            //心跳包
            case "heartbeat":
            {
                var heartBeat = messageJson.ToObject <HeartBeatEventArgs>();
                if (heartBeat != null && OnHeartBeatEvent != null)
                {
                    await InvokeEvent(OnHeartBeatEvent, heartBeat, oneBotApi, rawMsg);
                }
                break;
            }

            //生命周期
            case "lifecycle":
            {
                var lifeCycle = messageJson.ToObject <LifeCycleEventArgs>();
                if (lifeCycle != null && OnLifeCycleEvent != null)
                {
                    await InvokeEvent(OnLifeCycleEvent, lifeCycle, oneBotApi, rawMsg);
                }
                break;
            }

            default:
                _logger.LogWarning("[Meta Event]接收到未知事件[{MetaEventType}]", type);
                break;
            }
        }
コード例 #5
0
ファイル: TwitterHandler.cs プロジェクト: wuyu8512/NoAcg
        private async ValueTask OnConnection(IOneBotApi api)
        {
            _api = api;
            if (!_isStart)
            {
                foreach (var monitor in _globalService.TwitterSetting.Monitor.Where(monitor => monitor.Value.Enable))
                {
                    if (_manage == null)
                    {
                        //_twitterApi = new Lazy<TwitterApi>(() => new TwitterApi(_globalService.HttpClientProxyHandler));
                        _twitterApi = ActivatorUtilities.CreateInstance <Lazier <TwitterApi> >(_provider);
                        _manage     = ActivatorUtilities.CreateInstance <TweeterMonitorManage>(_provider, _twitterApi);
                    }

                    _manage.StartNewMonitor(monitor.Key, CallBack);
                }

                _isStart = true;
            }
        }
コード例 #6
0
        private async ValueTask <EventResult <BaseMsgQuickOperation> > Handler(BaseMessageEventArgs args, IOneBotApi api)
        {
            long?groupId = null;
            long?userId  = null;

            if (args is GroupMsgEventArgs groupArgs)
            {
                groupId = groupArgs.GroupId;
            }
            else
            {
                userId = args.UserId;
            }

            if (args.RawMessage.Equals(_globalService.YandeSetting.HotImg.Command,
                                       StringComparison.CurrentCultureIgnoreCase))
            {
                var(data, rating) = await _yandeService.Value.GetHotImgAsync(_globalService.YandeSetting.HotImg.Rating);

                var replay = CQCode.CQImage("base64://" + Convert.ToBase64String(data));
                return(1, replay);
            }

            foreach (var customTags in _globalService.YandeSetting.CustomTags)
            {
                if (args.RawMessage.Equals(customTags.Command, StringComparison.CurrentCultureIgnoreCase))
                {
                    var page = await _yandeService.Value.GetTagsPageAsync(customTags.Tag);

                    for (var i = 0; i < customTags.Count; i++)
                    {
                        var _ = Task.Run(async() =>
                        {
                            var(data, rating) = await _yandeService.Value.GetImageByTagsAsync(customTags.Tag, page, customTags.Rating);
                            await api.SendMsg(userId, groupId, new[] { CQCode.CQImage("base64://" + Convert.ToBase64String(data)) });
                        });
                    }

                    return(1);
                }
            }

            return(null);
        }
コード例 #7
0
ファイル: BiliBiliHandler.cs プロジェクト: wuyu8512/NoAcg
        private async ValueTask <EventResult <BaseMsgQuickOperation> > Handler(BaseMessageEventArgs args, IOneBotApi api)
        {
            if (args.RawMessage.Equals(_globalService.BiliSetting.HotCos.Command,
                                       StringComparison.CurrentCultureIgnoreCase))
            {
                var result = await BiliApi.GetCosHotAsync();

                if (result.Any())
                {
                    _logger.LogDebug("{Command}数量:{Count}", _globalService.BiliSetting.HotCos.Command, result.Length);
                    var cqCodes = new List <CQCode>();
                    var tasks   = result.Select(url => Task.Run(async() =>
                    {
                        try
                        {
                            cqCodes.Add(await CQHelper.Image(url, CQFileType.Base64));
                        }
                        catch (Exception e)
                        {
                            _logger.LogWarning("[SendImage]下载图片失败:{Url}\r\nError: {Error}", e.ToString(), url);
                        }
                    }));

                    await Task.WhenAll(tasks);

                    return(1, cqCodes.ToArray());
                }
            }

            return(null);
        }
コード例 #8
0
        private async ValueTask InvokeEvent <T>(EventCallBackHandler <T> handler, T args, IOneBotApi api, string rawMsg)
            where T : System.EventArgs
        {
            foreach (var @delegate in handler.GetInvocationList())
            {
                var func = (EventCallBackHandler <T>)@delegate;
                var code = 0;
                try
                {
                    code = await func(args, api);
                }
                catch (Exception e)
                {
                    _logger.LogError(e, "消息处理出现未知错误:{Msg}", rawMsg);
                }

                if (code == 1)
                {
                    break;
                }
            }
        }
コード例 #9
0
ファイル: TwitterHandler.cs プロジェクト: wuyu8512/NoAcg
 private async ValueTask <EventResult <GroupMsgQuickOperation> > OnGroupMessage(GroupMsgEventArgs args, IOneBotApi api)
 {
     return(null);
 }