private void EventProcessor(JToken payload) { switch (payload["post_type"]?.ToString()) { case "message": if (payload["message_type"]?.ToString() == "private") { LogHelper.Write("Onebot", "消息处理", $"[↓] 接收到 [私聊: {payload["user_id"]?.ToObject<long>()}] 的消息: {OnebotTools.ParseMessageToString(payload["message"])}", LogLevel.InfoReceive); OnPrivateMessage?.Invoke(payload); } if (payload["message_type"]?.ToString() == "group") { LogHelper.Write("Onebot", "消息处理", $"[↓] 接收到 [群: {payload["group_id"]?.ToObject<long>()} 用户: {payload.SelectToken("sender.user_id")?.ToObject<long>()}] 的消息: {OnebotTools.ParseMessageToString(payload["message"])}", LogLevel.InfoReceive); OnGroupMessage?.Invoke(payload); } break; case "notice": if (payload["notice_type"]?.ToString() == "group_upload") { LogHelper.Write("Onebot", "文件上传", $"[↓] 来自 [群: {payload["group_id"]?.ToObject<long>()} 用户: {payload["user_id"]?.ToObject<long>()}] 上传了文件: {payload.SelectToken("file.name")}", LogLevel.InfoReceive); OnGroupUpload?.Invoke(payload); } break; } }
/// <summary> /// 收到群消息 /// </summary> /// <param name="sender">事件来源</param> /// <param name="e">事件参数</param> public void GroupMessage(object sender, CQGroupMessageEventArgs e) { OnGroupMessage?.Invoke(sender, e); /* * LastMsg = msg;*/ // 设置该属性, 表示阻塞本条消息, 该属性会在方法结束后传递给酷Q e.Handler = false; }
public static void ClearHandler() { if (OnGroupMessage == null) { return; } Delegate[] dels = OnGroupMessage.GetInvocationList(); foreach (Delegate @delegate in dels) { OnGroupMessage -= @delegate as EventsHandler; } }
protected override void OnReceived(byte[] data) { Actived = DateTimeHelper.Now; if (data != null) { this.UserToken.Coder.Pack(data, null, (s) => { if (s.Content != null) { try { var cm = ConvertHelper.PBDeserialize <ChatMessage>(s.Content); switch (cm.Type) { case ChatMessageType.LoginAnswer: this.Logined = true; _autoResetEvent.Set(); break; case ChatMessageType.SubscribeAnswer: if (cm.Content == "1") { _subscribed = true; } else { _subscribed = false; } _autoResetEvent.Set(); break; case ChatMessageType.UnSubscribeAnswer: if (cm.Content == "1") { _unsubscribed = true; } else { _unsubscribed = false; } _autoResetEvent.Set(); break; case ChatMessageType.ChannelMessage: OnChannelMessage?.Invoke(cm.GetIMessage <ChannelMessage>()); break; case ChatMessageType.PrivateMessage: OnPrivateMessage?.Invoke(cm.GetIMessage <PrivateMessage>()); break; case ChatMessageType.GroupMessage: OnGroupMessage?.Invoke(cm.GetIMessage <GroupMessage>()); break; case ChatMessageType.PrivateMessageAnswer: _autoResetEvent.Set(); break; case ChatMessageType.CreateGroupAnswer: case ChatMessageType.RemoveGroupAnswer: case ChatMessageType.AddMemberAnswer: case ChatMessageType.RemoveMemberAnswer: _autoResetEvent.Set(); break; case ChatMessageType.GroupMessageAnswer: _autoResetEvent.Set(); break; default: Console.WriteLine("cm.Type", cm.Type); break; } } catch (Exception ex) { RaiseOnError("", ex); } } }, null); } }
private void _client_OnReceive(byte[] data) { Actived = DateTimeHelper.Now; if (data != null) { this._messageContext.Unpacker.Unpack(data, (s) => { if (s.Content != null) { try { var cm = SerializeHelper.PBDeserialize <ChatMessage>(s.Content); switch (cm.Type) { case ChatMessageType.LoginAnswer: this.Logined = true; break; case ChatMessageType.SubscribeAnswer: if (cm.Content == "1") { _subscribed = true; } else { _subscribed = false; } break; case ChatMessageType.UnSubscribeAnswer: if (cm.Content == "1") { _unsubscribed = true; } else { _unsubscribed = false; } break; case ChatMessageType.ChannelMessage: TaskHelper.Start(() => OnChannelMessage?.Invoke(cm.GetIMessage <ChannelMessage>())); break; case ChatMessageType.PrivateMessage: TaskHelper.Start(() => OnPrivateMessage?.Invoke(cm.GetIMessage <PrivateMessage>())); break; case ChatMessageType.GroupMessage: TaskHelper.Start(() => OnGroupMessage?.Invoke(cm.GetIMessage <GroupMessage>())); break; case ChatMessageType.PrivateMessageAnswer: break; case ChatMessageType.CreateGroupAnswer: case ChatMessageType.RemoveGroupAnswer: case ChatMessageType.AddMemberAnswer: case ChatMessageType.RemoveMemberAnswer: break; case ChatMessageType.GroupMessageAnswer: break; default: ConsoleHelper.WriteLine("cm.Type", cm.Type); break; } } catch (Exception ex) { OnError?.Invoke(_messageContext.UserToken.ID, ex); } } }, null, null); } }
private void OnGroupMessageInternal(ProtocolGroupMessage e) { OnGroupMessage?.Invoke(this, e); }