Inheritance: IContentItem
Example #1
0
        private void AfterInitialize()
        {
            _eventHandler = (sender, Event) =>
            {
                switch (Event.Type)
                {
                    case QQActionEventType.EVT_CANCELED:
                    case QQActionEventType.EVT_ERROR:
                    ShowMessage(Event.ToString());
                    break;
                }
            };

            _notifyHandler = (sender, Event) =>
            {
                var client = sender as IQQClient;
                if (client == null) return;

                try
                {
                    switch (Event.Type)
                    {
                        case QQNotifyEventType.BUDDY_INPUT:
                        case QQNotifyEventType.BUDDY_STATUS_CHANGE:
                        {
                            break;
                        }

                        case QQNotifyEventType.CHAT_MSG:
                        {
                            var msg = Event.Target as QQMsg;
                            switch (msg.Type)
                            {
                                case QQMsgType.SESSION_MSG:
                                case QQMsgType.BUDDY_MSG:
                                {
                                    if (msg.From.QQ == default(long))
                                    {
                                        client.GetUserInfo(msg.From);
                                    }
                                    ShowMessage(string.Format("{0}:【{1}】消息:{2}",
                                        client.Account.QQ, msg.From.Nickname, msg.GetText()));

                                    if (chkAutoReply.Checked)
                                    {
                                        var msgReply = new QQMsg()
                                        {
                                            Type = QQMsgType.BUDDY_MSG,
                                            To = msg.From,
                                            From = client.Account,
                                            Date = DateTime.Now,
                                        };
                                        TextItem text = null;

                                        if (chkUseRobot.Checked)
                                        {
                                            var replyEvent = client.GetRobotReply(msg,
                                                RobotType.Tuling).WaitFinalEvent(10000);
                                            if (replyEvent.Type == QQActionEventType.EVT_OK)
                                            {
                                                text = new TextItem(replyEvent.Target as string);
                                            }
                                            else
                                            {
                                                text = new TextItem("这是自动回复");
                                            }
                                        }
                                        else
                                        {
                                            text = new TextItem("这是自动回复");
                                        }
                                        Thread.Sleep(3000);
                                        client.SendMsg(msgReply);
                                        msgReply.ContentList.Add(text);
                                        ShowMessage(string.Format("{0}:自动回复给【{1}】:{2}",
                                            client.Account.QQ, msg.From.Nickname, text.ToText()));
                                    }
                                    break;
                                }

                                case QQMsgType.DISCUZ_MSG:
                                {
                                    ShowMessage(string.Format("{0}:讨论组【{1}】来自【{2}】消息:{3}",
                                        client.Account.QQ, msg.Discuz, msg.From.Nickname, msg.GetText()));
                                    break;
                                }

                                case QQMsgType.GROUP_MSG:
                                {
                                    ShowMessage(string.Format("{0}:群【{1}】来自【{2}】消息:{3}",
                                        client.Account.QQ, msg.Group, msg.From.Nickname, msg.GetText()));
                                    break;
                                }
                            }
                            break;
                        }

                        case QQNotifyEventType.KICK_OFFLINE:
                        ShowMessage(client.Account.QQ + ":被踢下线-" + (String)Event.Target);
                        break;

                        case QQNotifyEventType.CAPACHA_VERIFY:
                        {
                            var verify = (QQNotifyEventArgs.ImageVerify)Event.Target;
                            this.Invoke(new MethodInvoker(() =>
                            {
                                pbVerifyPic.Image = verify.Image;
                                tbVerifyCode.Enabled = true;
                                tbVerifyCode.Text = "";
                                tbVerifyCode.Focus();
                            }));

                            ShowMessage(verify.Reason);
                            ShowMessage(client.Account.Username + ":请输入验证码:");
                            _verifyCodeInputed.WaitOne();
                            client.SubmitVerify(tbVerifyCode.Text, Event);
                            tbVerifyCode.Invoke(new MethodInvoker(() =>
                            {
                                tbVerifyCode.Enabled = false;
                            }));
                            break;
                        }

                        case QQNotifyEventType.SHAKE_WINDOW:
                        {
                            var buddy = Event.Target as QQBuddy;
                            if (buddy?.QQ == default(long))
                            {
                                client.GetUserQQ(buddy, null);
                            }
                            ShowMessage(string.Format("{0}:【{1}】发来抖动屏幕", client.Account.QQ, buddy.ShowName));
                            if (chkAutoReply.Checked)
                            {
                                client.SendShake(buddy);
                            }
                            break;
                        }

                        case QQNotifyEventType.NET_ERROR:
                        case QQNotifyEventType.UNKNOWN_ERROR:
                        ShowMessage(client.Account.QQ + ":出错-" + Event.Target.ToString());
                        break;

                        default:
                        ShowMessage(client.Account.QQ + ":" + Event.Type + ", " + Event.Target);
                        break;
                    }
                    UpdateQQInfo(client);
                }
                catch (QQException e)
                {
                    ShowMessage(client.Account.QQ + ":" + e.StackTrace);
                }
                catch (Exception e)
                {
                    ShowMessage(e.StackTrace);
                }
            };

            var rightButtonCMS = new ContextMenuStrip();

            var TSMIRemove = new ToolStripMenuItem() { Text = "移除" };
            TSMIRemove.Click += (sender, e) =>
            {
                var TSMI = sender as ToolStripMenuItem;
                var CMS = TSMI?.Owner as ContextMenuStrip;
                if (CMS != null)
                {
                    var LV = CMS.SourceControl as ListView;
                    if (LV == lvQQList)
                    {
                        RemoveSelectedQQFromList();
                    }
                }
            };
            rightButtonCMS.Items.Add(TSMIRemove);
            lvQQList.ContextMenuStrip = rightButtonCMS;
        }
Example #2
0
        private QQNotifyListener GetListener()
        {
            return async (client, notifyEvent) =>
            {
                try
                {
                    switch (notifyEvent.Type)
                    {
                        case QQNotifyEventType.LoginSuccess:
                        {
                            client.Logger.LogInformation("登录成功");
                            break;
                        }
                        case QQNotifyEventType.GroupMsg:
                        {
                            var revMsg = (QQMsg)notifyEvent.Target;
                            if (revMsg.From.QQ.IsDefault()) await client.GetUserQQ(revMsg.From).WhenFinalEvent().ConfigureAwait(false);
                            client.Logger.LogInformation($"群[{revMsg.Group.Name}]-好友[{revMsg.From.Nickname}]:{revMsg.GetText()}");
                            break;
                        }
                        case QQNotifyEventType.ChatMsg:
                        {
                            var revMsg = (QQMsg)notifyEvent.Target;
                            if (revMsg.From.QQ.IsDefault()) await client.GetUserQQ(revMsg.From).WhenFinalEvent().ConfigureAwait(false);
                            client.Logger.LogInformation($"好友[{revMsg.From.Nickname}]:{revMsg.GetText()}");
                            if (chkUseRobot.Checked)
                            {
                                Thread.Sleep(3000);
                                var msgReply = new QQMsg()
                                {
                                    Type = QQMsgType.BUDDY_MSG,
                                    To = revMsg.From,
                                    From = client.Account,
                                    Date = DateTime.Now,
                                };
                                var replyEvent = await client.GetRobotReply(revMsg, RobotType.Turing).WhenFinalEvent();
                                if (replyEvent.Type == QQActionEventType.EvtOK)
                                {
                                    var str = (string)replyEvent.Target;
                                    var text = new TextItem($"{str} --来自机器人");
                                    msgReply.AddContentItem(text);
                                    msgReply.AddContentItem(new FontItem()); // 使用默认字体,不加这句对方收不到信息
                                    var result = await client.SendMsg(msgReply).WhenFinalEvent().ConfigureAwait(false);
                                    if (result.Type == QQActionEventType.EvtOK)
                                    {
                                        client.Logger.LogInformation($"自动回复给[{revMsg.From.Nickname}]:{text.ToText()}");
                                    }
                                    else
                                    {
                                        client.Logger.LogWarning($"自动回复给[{revMsg.From.Nickname}]发送失败");
                                    }
                                }
                                else
                                {
                                    client.Logger.LogWarning("获取机器人回复失败");
                                }
                            }
                            break;
                        }
                        case QQNotifyEventType.QrcodeInvalid:
                        {
                            client.Logger.LogWarning("二维码已失效");
                            CancelLogin();
                            break;
                        }
                        case QQNotifyEventType.QrcodeReady:
                        {
                            client.Logger.LogWarning("二维码获取成功,请用手机qq扫码登录");
                            var verify = (Image)notifyEvent.Target;
                            pbQRCode.InvokeIfRequired(() =>
                            {
                                pbQRCode.Image = verify;
                            });
                            break;
                        }
                        case QQNotifyEventType.KickOffline:
                        {
                            client.Logger.LogInformation("被踢下线");
                            break;
                        }
                        case QQNotifyEventType.ShakeWindow:
                        {
                            var buddy = (QQBuddy)notifyEvent.Target;
                            if (buddy.QQ.IsDefault()) await client.GetUserQQ(buddy).WhenFinalEvent().ConfigureAwait(false);
                            client.Logger.LogInformation($"[{buddy.ShowName}]发来抖动屏幕");
                            break;
                        }
                        case QQNotifyEventType.BuddyInput:
                        case QQNotifyEventType.BuddyStatusChange:
                        case QQNotifyEventType.QrcodeSuccess:
                        case QQNotifyEventType.NetError:
                        case QQNotifyEventType.UnknownError:
                        break;

                        default:
                        client.Logger.LogInformation(notifyEvent.Type + ", " + notifyEvent.Target);
                        break;
                    }
                }
                catch (Exception ex)
                {
                    client.Logger.LogError(ex.ToString());
                }
            };
        }