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

入坑提示

建议开发者先根据自身需求结合表格,选择属于自己的专属开发框架,避免浪费时间。

  1. 编写一套代码就能在多个平台运行
  2. 支持使用除了C#之外的开发语言来开发
  3. 我希望他足够简单,不用学习太多就能掌握,通常只需要半个小时就能掌握所有内容
  4. 我希望社区的反馈足够快,有问题都可以帮我解决
SDK名称 (1) (2) (3) (4)
论坛中的其他SDK
Jie2GG.Native.Csharp.Frame
Newbe.Mahua V2
Newbe.Mahua V1

论坛其他SDK的链接

插件功能

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

基础环境要求

  • Windows 操作系统
  • .Net Framework 4.5.2 及以上
  • Powershell 5.0及以上,仅开发环境要求
  • .Net Core SDK 2.2 及以上,仅开发环境要求

IDE

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

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

设置Powershell执行策略限制

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

 
bash
powershell -command "Set-ExecutionPolicy RemoteSigned -Force"

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

安装项目模板

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

 
 
dotnet new -i Newbe.Mahua.Template

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

项目模板安装结果

新建项目

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

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

本示例使用全平台模板 newbe.mahua.all 进行演示。

特别注意:为了确保新建的项目的能够在所有平台运行,项目名称至少需要包含 AAA.BBB.CCC 三段。

本次实例使用名称 Newbe.Mahua.Plugins.Parrot 进行演示。

使用 Rider

直接使用 Rider 创建项目,可以在 Other 模板分组中找到该框架相关的模板。

使用Rider创建项目

等待 Rider 创建完毕后,进入新建的项目文件夹中。使用控制台执行更新命令,更新相应的组件包到最新:

 
 
build.bat UpdateMahuaPackages

使用其他 IDE

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

 
 
powershell -command "Set-ExecutionPolicy RemoteSigned -Force"

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

安装项目模板

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

 
 
dotnet new -i Newbe.Mahua.Template

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

项目模板安装结果

新建项目

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

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

本示例使用全平台模板 newbe.mahua.all 进行演示。

特别注意:为了确保新建的项目的能够在所有平台运行,项目名称至少需要包含 AAA.BBB.CCC 三段。

本次实例使用名称 Newbe.Mahua.Plugins.Parrot 进行演示。

使用 Rider

直接使用 Rider 创建项目,可以在 Other 模板分组中找到该框架相关的模板。

使用Rider创建项目

等待 Rider 创建完毕后,进入新建的项目文件夹中。使用控制台执行更新命令,更新相应的组件包到最新:

 
 
build.bat UpdateMahuaPackages

使用其他 IDE

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

 
 
REM 创建解决方案
dotnet new sln -n Newbe.Mahua.Plugins.Parrot REM 创建项目文件夹
mkdir Newbe.Mahua.Plugins.Parrot REM 切换目录
cd Newbe.Mahua.Plugins.Parrot REM 使用模板创建项目
dotnet new newbe.mahua.all -n Newbe.Mahua.Plugins.Parrot
y REM 切换目录
cd ../ REM 将项目添加到解决方案中
dotnet sln Newbe.Mahua.Plugins.Parrot.sln add Newbe.Mahua.Plugins.Parrot/Newbe.Mahua.Plugins.Parrot.csproj
echo finished

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

具体效果如图所示:

使用模板初始化项目

修改插件基本信息

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

 
csharp
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框架开发的第一个插件。该插件实现将好友的私聊消息回发给好友的功能。";
}
}

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

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

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

将 ItemTemplate/MahuaEvent/PrivateMessageReceivedMahuaEvent.cs

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

处理事件

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

 
csharp
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

 
csharp
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
QQLight http://www.52chat.cc/

启用插件

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

CQP

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

开启开发者模式

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

MPQ、QQLight

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

成功!

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

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

继续了解

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

教程链接

发布说明

来源: newbe
文章作者: newbe36524
文章链接: https://www.newbe.pro/Newbe.Mahua/Begin-First-Plugin-With-Mahua-In-v1.9/
本文章著作权归作者所有,任何形式的转载都请注明出处。

使用C# 开始第一个QQ机器人的更多相关文章

  1. 基于WebQQ3.0协议写一个QQ机器人

    最近公司需要做个qq机器人获取qq好友列表,并且能够自动向选定的qq好友定时发送消息.没有头绪,硬着头皮上 甘甜的心情瞬间变得苦涩了 哇 多捞吆 1.WEBQQ3.0登陆协议 进入WEBQQ, htt ...

  2. 体验 QQ机器人C# SDK 1.X 特性总结

    主要特性 依赖注入 框架本身采用 Autofac 作为依赖注入框架.进行插件开发时,必然会使用到该框架.建议开发者阅读官方文档熟悉其用法.https://autofac.readthedocs.io/ ...

  3. 第一讲 从头开始做一个web qq 机器人,第一步获取smart qq二维码

    新手教程: 前言:最近在看了一下很久很久以前做的qq机器人失效了,最近也在换工作目前还在职,时间很挺宽裕的.就决定从新搞一个web qq机器人 PC的协议解析出来有点费时间以后再做. 准备工作: 编译 ...

  4. 实现QQ机器人报警

    如题,废话不说,直接上代码.首先是登录QQ的小脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...

  5. Python3实现QQ机器人自动爬取百度文库的搜索结果并发送给好友(主要是爬虫)

    一.效果如下: 二.运行环境: win10系统:python3:PyCharm 三.QQ机器人用的是qqbot模块 用pip安装命令是: pip install qqbot (前提需要有request ...

  6. QQ机器人

    先说下整体思路1.首先要借助一个QQ 插件,用来接收消息 发送消息2.要用个QQ 小号,这个QQ 你不能用来登,因为他相当于那个机器人3.要借助大神开发的SDK ,就是别人写的底层交互 ,我们只需要关 ...

  7. phantomjs + python 打造一个微信机器人

    phantomjs + python 打造一个微信机器人 1.前奏   媳妇公司不能上网,但经常需要在公众号上找一些文章做一些参考,需要的时候就把文章链接分享给我,然后我在浏览器打开网页,一点点复制过 ...

  8. python实现qq机器人qqbot

    title: python实现qq机器人qqbot tags: python date: 2018-6-1 10:19:00 --- 以下内容为转载 一.介绍 qqbot 是一个用 python 实现 ...

  9. NoneBot+酷Q,打造QQ机器人

    NoneBot 是一个基于 酷Q 的 Python 异步 QQ 机器人框架,它会对 QQ 机器人收到的消息进行解析和处理,并以插件化的形式,分发给消息所对应的命令处理器和自然语言处理器,来完成具体的功 ...

随机推荐

  1. Redis键迁移

    Redis键迁移   在使用Redis的过程中,很多时候我们会遇到需要进行键迁移的问题,需要将指定Redis中的指定数据迁移到其他Redis当中,键迁移有三种方法,我们来进行一一介绍. 一.move ...

  2. LoadRunner 技巧之 IP欺骗 (推荐)

    IP欺骗也是也loadrunner自带的一个非常有用的功能. 需要使用ip欺骗的原因:1.当某个IP的访问过于频繁,或者访问量过大是,服务器会拒绝访问请求,这时候通过IP欺骗可以增加访问频率和访问量, ...

  3. ASP.NET关于Session_End触发与否的问题

    项目背景: 要求开发一个篆文识别网站,由于之前做好了WinForm的,把系统直接移植到WebForm上就好.工作比较简单,但确实遇到不少问题. 核心问题是: 篆文识别涉及到用户对原始图片的预处理(例如 ...

  4. Microsoft.Office.Interop.Excel 导出Excel

    ; ; /// <summary> /// 使用 Excel.dll 导出 Excel /// </summary> /// <param name="list ...

  5. LINQ to objects遇到的小坑

    1.C#中LINQ to Objects中延迟查询的陷阱(其他类型的LINQ也基本一致) 之前在不了解LINQ延迟查询的时候,我使用下面的这种方式,将where语句的结果直接as为List<T& ...

  6. 纸壳CMS可视化建站系统搭建多语言网站

    纸壳CMS是可视化建站系统,现已经从架构上支持多语言.但是多语言功能默认是没有开启的.您可以从设置中开启多语言,或者随时关闭它,您可以随时进行切换. 开启多语言 如果您没有在系统设置中看到多语言设置菜 ...

  7. jsp(Java的服务网页)$javabean

    JSP:Java Server Page(Java的服务网页),也是Java的动态网页.  JSP的本质:其实就是一个Servlet.  JSP---->翻译成Servlet类---->编 ...

  8. 如何学习、了解Kubernetes?

    欢迎访问网易云社区,了解更多网易技术产品运营经验 [Kubernetes官方文档](https://kubernetes.io/docs/tutorials/)是最基本的入门教材,这里的内容是最官方, ...

  9. day 94 RestFramework序列化组件与视图view

    一 .复习 1. CBV流程 class BookView(View): def get(): pass def post(): pass #url(r'^books/', views.BookVie ...

  10. 2018-2019-2 20175306实验三敏捷开发与XP实践《Java开发环境的熟悉》实验报告

    2018-2019-2 20175306实验三敏捷开发与XP实践<Java开发环境的熟悉>实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 1.没有Linux基础的同学建议先 ...