开始第一个QQ机器人【适用于v1.9-1.14】

本示例将会使用”嘤鹉学舌”这个小插件的实现来演示如何使用Newbe.Mahua实现第一个机器人插件。

插件功能

自动将发送者的消息回发给发送人,嘤鹉(Parrot,其实是说嘤嘤嘤怪)学舌。

基础环境要求

IDE

开发者可以任选以下任意一款IDE

  • Visual Studio 2017(VS2015 update 3 理论上也能够开发,但开发遇到的问题,需自行解决)
  • Visual Studio Code
  • Rider(Newbe更加推荐)

设置Powershell执行策略限制

参考链接:http://www.pstips.net/powershell-create-and-start-scripts.html

简单来说,使用管理员权限在cmd中运行以下命令:


powershell -command "Set-ExecutionPolicy RemoteSigned -Force"

安装VS扩展

从VS扩展商店下载最新的VS扩展,下载地址为:https://marketplace.visualstudio.com/items?itemName=Newbe36524.NewbeMahuaVsExtensions

若出现下载不畅通,也可以通过加入技术交流群,在群文件中进行下载。点击加入Newbe.Mahua群【610394020】

安装过程可能需要花费若干分钟,需耐心等待。

安装完毕,需要重启所有VS方可生效。

如果您是非VS用户,可以不需要安装该插件。

安装项目模板

在安装好 .Net Core SDK 之后,启动控制台运行以下命令:


dotnet new -i Newbe.Mahua.Template

出现以下内容,则说明项目模板已经安装成功。

项目模板安装结果

新建项目

项目模板包含有五个,包含四个对应平台的模板和一个全平台的模板。

名称 说明
newbe.mahua.all 全平台
newbe.mahua.cqp 酷 Q
newbe.mahua.cleverqq cleverqq
newbe.mahua.mpq MyPcQQ
newbe.mahua.qqlight QQLight

本示例使用全平台模板进行演示。

新建一个空的文件夹,启动控制台,cd进入该文件夹,运行以下命令:


dotnet new sln -n Newbe.Mahua.Plugins.Parrot
mkdir Newbe.Mahua.Plugins.Parrot 
cd Newbe.Mahua.Plugins.Parrot
dotnet new newbe.mahua.all -n Newbe.Mahua.Plugins.Parrot
y
cd ../
dotnet sln Newbe.Mahua.Plugins.Parrot.sln add Newbe.Mahua.Plugins.Parrot/Newbe.Mahua.Plugins.Parrot.csproj
echo finished

初次执行这些命令需要1-2分钟时间。

具体效果如图所示:

使用模板初始化项目

修改插件基本信息

打开PluginInfo.cs文件,按照实际需求和注释内容进行修改。


namespace Newbe.Mahua.Plugins.Parrot
{
    /// <summary>
    /// 本插件的基本信息
    /// </summary>
    public class PluginInfo : IPluginInfo
    {
        /// <summary>
        /// 版本号,建议采用 主版本.次版本.修订号 的形式
        /// </summary>
        public string Version { get; set; } = "1.0.0";

        /// <summary>
        /// 插件名称
        /// </summary>

        public string Name { get; set; } = "嘤鹉学舌";

        /// <summary>
        /// 作者名称
        /// </summary>
        public string Author { get; set; } = "Newbe";

        /// <summary>
        /// 插件Id,用于唯一标识插件产品的Id,至少包含 AAA.BBB.CCC 三个部分
        /// </summary>
        public string Id { get; set; } = "Newbe.Mahua.Plugins.Parrot";

        /// <summary>
        /// 插件描述
        /// </summary>
        public string Description { get; set; } = "嘤鹉学舌,是一个使用Mahua框架开发的第一个插件。该插件实现将好友的私聊消息回发给好友的功能。";
    }
}

添加”接收好友消息事件”代码实现

添加事件

使用VS

MahuaEvents处右键,选择”添加->新建项”。

MahuaEvents文件夹是本SDK建议将事件放置的文件夹位置。也可以不接受建议而添加在其他地方。

添加->新建项

如下图所示,选择”来自好友的私聊消息接收事件”。

新建好友消息处理事件

不使用VS

新建出来的项目中包含一个 ItemTemplate 文件夹,里面包含了所有需要的项模板。

注意,这个文件夹默认没有包含到项目中,需要使用资源管理器进行查看。

ItemTemplate/MahuaEvent/PrivateMessageReceivedMahuaEvent.cs 文件复制到 MahuaEvents/PrivateMessageReceivedMahuaEvent.cs,并使用IDE将复制后的文件包含在项目中。

处理事件

PrivateMessageFromFriendReceivedMahuaEvent.cs中,调用IMahuaApi,将好友消息回发给好友,实现嘤鹉学舌的效果。


using Newbe.Mahua.MahuaEvents;
using System.Threading.Tasks;

namespace Newbe.Mahua.Plugins.Parrot.MahuaEvents
{
    /// <summary>
    /// 来自好友的私聊消息接收事件
    /// </summary>
    public class PrivateMessageFromFriendReceivedMahuaEvent
        : IPrivateMessageFromFriendReceivedMahuaEvent
    {
        private readonly IMahuaApi _mahuaApi;

        public PrivateMessageFromFriendReceivedMahuaEvent(
            IMahuaApi mahuaApi)
        {
            _mahuaApi = mahuaApi;
        }

        public void ProcessFriendMessage(PrivateMessageFromFriendReceivedContext context)
        {
          // 戳一戳
          _mahuaApi.SendPrivateMessage(context.FromQq)
              .Shake()
              .Done();

          // 嘤嘤嘤,换行,重复消息
          _mahuaApi.SendPrivateMessage(context.FromQq)
              .Text("嘤嘤嘤:")
              .Newline()
              .Text(context.Message)
              .Done();

          // 异步发送消息,不能使用 _mahuaApi 实例,需要另外开启Session
         Task.Factory.StartNew(() =>
         {
             using (var robotSession = MahuaRobotManager.Instance.CreateSession())
             {
                 var api = robotSession.MahuaApi;
                 api.SendPrivateMessage(context.FromQq, "异步的嘤嘤嘤");
             }
         });
        }
    }
}

在模块中注册事件

打开MahuaModule.cs文件,在MahuaEventsModule中注册刚刚添加的PrivateMessageFromFriendReceivedMahuaEvent


using Autofac;
using Newbe.Mahua.MahuaEvents;
using Newbe.Mahua.Plugins.Parrot.MahuaEvents;

namespace Newbe.Mahua.Plugins.Parrot
{
    /// <summary>
    /// Ioc容器注册
    /// </summary>
    public class MahuaModule : IMahuaModule
    {
        public Module[] GetModules()
        {
            // 可以按照功能模块进行划分,此处可以改造为基于文件配置进行构造。实现模块化编程。
            return new Module[]
            {
                new PluginModule(),
                new MahuaEventsModule(),
            };
        }

        /// <summary>
        /// 基本模块
        /// </summary>
        private class PluginModule : Module
        {
            protected override void Load(ContainerBuilder builder)
            {
                base.Load(builder);
                // 将实现类与接口的关系注入到Autofac的Ioc容器中。如果此处缺少注册将无法启动插件。
                // 注意!!!PluginInfo是插件运行必须注册的,其他内容则不是必要的!!!
                builder.RegisterType<PluginInfo>()
                    .As<IPluginInfo>();

            }
        }

        /// <summary>
        /// <see cref="IMahuaEvent"/> 事件处理模块
        /// </summary>
        private class MahuaEventsModule : Module
        {
            protected override void Load(ContainerBuilder builder)
            {
                base.Load(builder);
                // 将需要监听的事件注册,若缺少此注册,则不会调用相关的实现类
                builder.RegisterType<PrivateMessageFromFriendReceivedMahuaEvent>()
                    .As<IPrivateMessageFromFriendReceivedMahuaEvent>();
            }
        }
    }
}

生成与打包

生成项目,然后双击位于项目根目录的build.bat文件。

build.bat执行成功

复制文件到机器人平台

bin目录下会按照当前安装的平台生成相应的目录。本示例将会生成CQP、Amanda和MPQ三个目录。

分别将三个文件夹下的所有文件和文件夹都复制到对应的机器人平台根目录

以CQP为例,进行一次复制过程如下图所示:

CQP复制插件

各机器人软件下载地址:

名称 地址
CQP https://cqp.cc/
MPQ https://f.mypcqq.cc/thread-2327-1-1.html
CleverQQ https://d.cleverqq.cn/forum.php
QQLight http://www.52chat.cc/

启用插件

各个机器人平台的启用方式各不相同。

CQP

按照下图所示,开启开发者模式。

开启开发者模式

打开插件管理将插件启用。

CleverQQ

打开插件管理将插件启用。

MPQ

打开插件管理将插件启用。

QQLight

打开插件管理将插件启用。

成功!

发送消息给机器人,你就会收到机器人回发的信息。

机器人插件启动可能需要一段时间,并且大多数平台都会丢弃离线信息,可能需要等待一会儿在发送。

继续了解

Newbe.Mahua 1.X 主要特性介绍与常见问题讲解

教程链接

Newbe.Mahua 1.X 主要特性介绍与常见问题讲解

开始第一个QQ机器人【适用于v1.9-1.14】

Newbe.Mahua 插件热更新

Newbe.Mahua.Samples.ApiExtensions 对IMahuaApi进行扩展

Newbe.Mahua.Samples.LiveGirl 操作定时任务

Newbe.Mahua.Samples.Sqlite SQLite操作实例

Newbe.Mahua 测试与调试

Newbe.Mahua 扩展设置中心

【开源访谈】对接 QQ 机器人平台,对接共同成长的开源社区(开源中国采访)

发布说明

Newbe.Mahua 1.14 全新项目模板

Newbe.Mahua 1.13 支持撤回消息

Newbe.Mahua 1.12 第一个LTS版本

Newbe.Mahua 1.11 支持热更新

Newbe.Mahua 1.10 全新日志查看器

Newbe.Mahua 1.9 引入 Session

Newbe.Mahua 1.8 消息发送Fluent API

Newbe.Mahua 1.7.0 支持API扩展

Newbe.Mahua 1.6.0 开发便利性提升