Inicio rápido
Para obtener la documentación completa, consulte -> https://Drincann.github.io/Mirai-js
Clone el proyecto al local:
$ git clone https://github.com/Drincann/Mirai-js.git
Entrada de interfaz ubicada ./src/Mirai-js.js
deconstrucción del archivo:
const {
Bot, Message } = require('./src/Mirai-js');
iniciar sesión
Puede ingresarlo directamente en la consola mirai/login qq password
.
Si desea controlar remotamente el inicio de sesión de mirai-console , mediante el Bot
método de clase sendCommend
para enviar comandos:
await Bot.sendCommand({
// mirai-api-http 服务的网络位置
baseUrl: 'http://example.com:8080',
// 在 mirai-api-http 的配置中设置的 authKey
authKey: 'authKey',
// 指令名
command: '/login',
// 指令参数列表,这条指令等价于 /login 1019933576 password
args: ['1019933576', 'password'],
});
Preste atención al valor de retorno de este método, problemas conocidos:
Error de inicio de sesión: Mirai no pudo completar la verificación del control deslizante. Utilice el protocolo ANDROID_PHONE para forzar la verificación del control deslizante, cambie el protocolo y vuelva a intentarlo. Consulte también: https://github.com/project-mirai/mirai-login-solver -selenio '
¡No inicie sesión repetidamente!
establecer conexión
Obtenga una Bot
instancia y luego llame a un open
método en la instancia para conectarse a su servicio mirai-api-http :
const bot = new Bot();
// 连接到一个 mirai-api-http 服务
await bot.open({
baseUrl: 'http://example.com:8080',
authKey: 'authKey',
// 要绑定的 qq,须确保该用户已在 mirai-console 登录
qq: 1019933576,
});
Las llamadas repetidas al
open
método restablecerán la conexión, si es necesario restablecer la conexión, puede pasar los parámetros que desea modificar.Si no se proporcionan parámetros, se mantendrá la configuración original.
enviar mensajes
Envíe un mensaje a un amigo:
await bot.sendMessage({
// 好友 qq 号
friend: '1019933576',
// Message 实例,表示一条消息
message: new Message().addText('hello world!').addImageUrl('http://exapmle/image.jpg'),
});
¡Nota! Estos métodos son asincrónicos
También puede usar el formato original requerido por la interfaz mirai-api-http como mensaje.
Envíe un mensaje al grupo:
await bot.sendMessage({
// 群号
group: '123456789',
// 是 http server 接口所需的原始格式,若提供则优先使用
messageChain: [
{
type: 'Plain', text: 'hello world!'},
{
type: 'Image', url:;'http://example/image.jpg'},
],
});
Para MessageChain
tipos de mensajes específicos , consulte MessageType .
Recibe mensajes y eventos
Registre el controlador de eventos para recibir mensajes de amigos:
// 监听好友消息事件
bot.on('FriendMessage', async data => {
await bot.sendMessage({
friend: data.sender.id,
message: new Message().addText('hello world!'),
});
});
La estructura del mensaje del evento FriendMessage:
{
messageChain,
sender: {
id,
nickname,
remark
}
}
El marco proporciona el contenido específico del mensaje en la forma del messageChain original. Su estructura es una matriz de MessageType. Ver MessageType para varios MessageTypes.
No importa si no quieres verlo, si solo te enfocas en los mensajes de texto, entonces podemos resolver este problema fácilmente usando el middleware predefinido por el framework.
Recibir mensajes grupales:
// 监听群消息事件
bot.on('GroupMessage', async data => {
await bot.sendMessage({
group: data.sender.group.id,
message: new Message().addText('hello world!'),
});
// 你可以像这样来判断群成员的权限
switch (data.sender.permission) {
case Bot.GroupPermission.OWNER:
// 群主
break;
case Bot.GroupPermission.ADMINISTRATOR:
// 管理员
break;
case Bot.GroupPermission.MEMBER:
// 普通群成员
break;
}
});
La estructura del mensaje del evento GroupMessage:
{
messageChain,
sender: {
id,
memberName,
permission,
group: {
id,
name,
permission
}
}
}
Para tipos de eventos específicos y estructura de mensajes, consulte EventType .
Utilice middleware
El marco también proporciona una serie de middleware predefinido para procesar mensajes:
const {
Middleware } = require('./src/Mirai-js');
Obtenga Middleware
ejemplos:
const middleware = new Middleware();
Llame al middleware que necesita en la instancia (encadenado):
textProcessor
Para unir messageChain
todos los mensajes de texto y colocarlos data.text
, groupFilter
filtrará el número de grupo designado de eventos de mensajes de grupo.
middleware.textProcessor().groupFilter([123456789, 987654321]);
Al llamar al done
método, pasando su controlador de eventos, el controlador de eventos se obtiene con un middleware:
const processor = middleware.done(async data => {
bot.sendMessage({
friend: data.sender.id,
message: new Message().addText(data.text),
});
});
Registrarse en un evento:
bot.on('FriendMessage', processor);
También se puede combinar entre sí:
bot.on('FriendMessage', new Middleware()
.textProcessor()
.groupFilter([123456789, 987654321])
.done(async data => {
bot.sendMessage({
friend: data.sender.id,
message: new Message().addText(data.text),
});
})
);
Además, también puede personalizar el middleware mediante use
:
Finalmente, la llamada next
transfiere el control al siguiente middleware.
const processor = middleware.use((data, next) => {
data.text = data.messageChain
.filter((val) => val.type == 'Plain')
.map((val) => val.text)
.join('');
next();
}).done(/* callback */);
Problemas conocidos
Cuando nuestro bot se desconecta y vuelve a iniciar sesión, la sesión actual entrará en un estado que no se invalida pero no se puede operar. Las operaciones forzadas (como enviar un mensaje) arrojarán una excepción del servidor (estado 500).
Llamar al open
método nuevamente después de iniciar sesión nuevamente puede evitar este problema.
O use un autoReLogin
middleware predefinido en un evento que requiera volver a iniciar sesión , y se iniciará automáticamente después de que se interrumpa la conexión, por ejemplo:
bot.on('BotOfflineEventForce',
new Middleware()
.autoReLogin({
bot, baseUrl, authKey, password })
.done()
);