qqbot es un robot QQ implementado en Python y basado en el protocolo SmartQQ de Tencent. Puede ejecutarse en plataformas Linux, Windows y Mac OSX.
La dirección de github de este proyecto: https://github.com/pandolia/qqbot
Puedes hacer esto extendiendo qqbot:
Para usar en Python 2.7/3.4+, instale con pip:
pip install qqbot
O descargue el código fuente, descomprímalo, vaya al directorio y ejecute: pip install
.
Ingrese: qqbot en la línea de comando para iniciar un QQBot.
Durante el proceso de inicio, aparecerá automáticamente una imagen de código QR. Debe utilizar el cliente QQ móvil para escanear el código y autorizar el inicio de sesión. Después de un inicio exitoso, la información de inicio de sesión se guardará en un archivo local. La próxima vez que inicie, puede ingresar: qqbot -q qq número . Primero intente restaurar la información de inicio de sesión desde el archivo local (no es necesario escanear el código manualmente). Solo falla la recuperación. Deberá escanear manualmente el código QR para iniciar sesión si el inicio de sesión se realizó correctamente o si la información de inicio de sesión ha caducado. En términos generales, la información de inicio de sesión guardada caducará después de 2 días.
Nota: En Linux, se requiere el comando gvfs-open o shotwell en el sistema para que aparezca automáticamente la imagen del código QR (generalmente, los sistemas con el sistema de archivos virtual GNOME gvfs instalado contendrán uno de estos dos comandos). En Windows 10, el programa de apertura predeterminado para archivos de imagen png debe configurarse en el sistema para que muestre automáticamente la imagen del código QR.
Si el sistema no puede mostrar automáticamente la imagen del código QR, puede abrir manualmente el archivo de imagen y escanear el código, o puede configurar el modo de visualización del código QR en modo buzón, modo servidor o modo texto para escanear el código. consulte la Sección 7 de este documento.
Después de iniciar QQBot, use el comando qq en otra ventana de la consola para operar QQBot. Actualmente se proporcionan los siguientes comandos:
1) 帮助、停机和重启命令
qq help|stop|restart|fresh-restart
2) 联系人查询、搜索命令
qq list buddy|group|discuss [$cinfo|$clike]
( $cinfo --> $qq|$name|$key=$val )
( $clike --> :like:$qq|:like:$name|$key:like:$name )
qq list group-member|discuss-member $oinfo|$olike [$cinfo|$clike]
( $oinfo --> $oqq|$oname|$okey=$oval )
( $cinfo --> $qq|$name|$key=$val )
( $olike --> :like:$oqq|:like:$oname|$okey:like:$oname )
( $clike --> :like:$qq|:like:$name|$key:like:$name )
3) 联系人更新命令
qq update buddy|group|discuss
qq update group-member|discuss-member $ginfo
4) 消息发送命令
qq send buddy|group|discuss $rinfo $message
5) 加载/卸载/显示插件
qq plug/unplug myplugin
qq plugins
El comando de lista proporciona potentes funciones de consulta y búsqueda de contactos. Los ejemplos de uso son los siguientes:
# 列出所有好友
qq list buddy
# 列出 名称 为 xxx 的群
qq list group xxx
# 列出备注名为 jack 的好友
qq list buddy mark=jack
# 列出 群“456班” 的所有成员
qq list group-member 456班
# 列出 群“456班” 中名片为 “mike” 的成员
qq list group-member 456班 card=mike
# 列出 讨论组“XX小组” 中名为 jack 的好友
qq list discuss-member XX小组 jack
Si el tercer y cuarto parámetro están en el formato key=val, deben estar en el formato name=xx|nick=xx|mark=xx|card=xx|qq=xx. tecla = val, presione El principio de procesamiento es el siguiente: si es una cadena de números, consulte por número QQ; de lo contrario, consulte por nombre.
Si hay un nombre duplicado, se enumerarán todos los contactos con el nombre duplicado. como:
qq list group 机器人测试
Se enumerarán todos los grupos denominados "Bot Test".
Si se agrega ":like:" al tercer y cuarto parámetro del comando de lista, la búsqueda se basará en patrones de coincidencia parcial. Los ejemplos de uso son los siguientes:
# 列出名称中含有 “李” 的好友
qq list buddy :like:李
# 列出 QQ 中含有 “234” 的群
qq list group :like:234
# 列出备注名中含有 jack 的好友
qq list buddy mark:like:jack
# 列出 群“456班” 的中名称中含有 “李” 的成员
qq list group-member 456班 :like:李
# 列出 群“456班” 中名片中含有 “mike” 的成员
qq list group-member 456班 card:like:mike
# 列出的 讨论组“xx小组” 中名为 jack 的好友
qq list discuss-member :like:小组 jack
A partir de la versión v2.2.5, el comando list utiliza una tabla para generar la lista de contactos. Un ejemplo de su estilo de salida es el siguiente:
Para garantizar el efecto de visualización de la tabla en el terminal, se recomienda configurar la fuente de salida del terminal en consolas y el número máximo de caracteres que se pueden imprimir en cada línea es superior a 120. También tenga en cuenta: para garantizar el efecto de visualización de la tabla, cuando el nombre del contacto, la tarjeta de presentación y otros atributos son demasiado largos o contienen caracteres especiales, estos atributos se truncarán o filtrarán antes de enviarse al terminal.
El comando de actualización actualiza la lista de contactos especificada y el significado de sus parámetros es el mismo que el del comando de lista, como por ejemplo:
# 更新好友列表
qq update buddy
# 更新群列表
qq update group
# 更新 群“456班” 的成员列表
qq update group-member 456班
El tercer parámetro del comando de envío tiene el mismo formato que el tercer parámetro del comando de lista. Tenga en cuenta que si hay un nombre duplicado, se enviará un mensaje a todos los contactos con el mismo nombre. También tenga en cuenta que el segundo parámetro solo puede ser amigo/grupo/discutir, no miembro del grupo/miembro de la discusión. Ejemplo:
# 给 好友“jack” 发消息 “你好”
qq send buddy jack 你好
# 给 群“198班” 发消息 “大家好”
qq send group 198班 大家好
# 给 QQ 为 12345 的好友发消息
qq send buddy 12345 xxx
# 给讨论组发消息
qq send discuss MyDiscuss hello
Puede incrustar palabras clave de emoticones como "/cute" en el contenido del mensaje para enviar emoticones a la otra parte. Consulte facemap.py para obtener más detalles. También puede utilizar los dos caracteres de escape n y t en el contenido del mensaje (por ejemplo: enviar a buddy jack primera línean segunda línea).
Todos los comandos anteriores proporcionan las interfaces API HTTP correspondientes para que las llamen los desarrolladores de aplicaciones para el usuario. La dirección URL de la interfaz es http://127.0.0.1:8188/{command}. del comando después de qq. Simplemente separe y reemplace el comando en la URL, como por ejemplo: http://127.0.0.1:8188/send/buddy/jack/hello. , consulte urltestbot.md para ver otros ejemplos. Nota: Si el comando contiene caracteres chinos o especiales, primero se debe realizar la codificación de URL (utf8). Por ejemplo, llame a http://127.0.0.1:8188/send/buddy/jack/nihao%20%E4%BD%. A0%E5 %A5%BD%20wohao enviará el mensaje "nihao hola wohao". (Consejo: en JavaScript, puede utilizar la función encodeURIComponent para codificar).
Además, después de iniciar QQBot, si usa esta cuenta QQ para enviar un mensaje "--version" a un grupo/grupo de discusión en otros clientes (como QQ móvil), QQBot responderá automáticamente al grupo/grupo de discusión: "QQBot-v2.xx".
Es muy sencillo implementar su propio robot QQ. Solo necesita definir su propia función de respuesta de mensajes y cargarla como un complemento. Código de muestra:
# -*- coding: utf-8 -*-
def onQQMessage ( bot , contact , member , content ):
if content == '-hello' :
bot . SendTo ( contact , '你好,我是QQ机器人' )
elif content == '-stop' :
bot . SendTo ( contact , 'QQ机器人已关闭' )
bot . Stop ()
Tenga en cuenta que el nombre de la función de respuesta registrada anteriormente debe ser "onQQMessage" y los parámetros de la función también deben ser coherentes con lo anterior.
Guarde el código anterior como sample.py (tenga en cuenta que se guarda como un archivo codificado en utf8). Colóquelo en el directorio ~/.qqbot-tmp/plugins/ ( ~ representa el directorio de inicio del usuario, C:Usersxxx en win7), o en un directorio que se pueda importar en el sistema (como Lib/ en Python directorio de instalación) directorio de paquetes de sitio).
Después de eso, mantenga el proceso qqbot anterior en ejecución e ingrese qq plug sample en otra consola. Luego, la función onQQMessage en este archivo se puede registrar en el evento correspondiente de QQBot. En este momento, si usa otro QQ para enviar el mensaje "-hola" a este QQ, automáticamente responderá "Hola, soy un robot QQ" . Si envía el mensaje "-stop" , el robot QQ será. cerrado.
Ingrese qq unplug sample en la consola para desinstalar este complemento y la función de devolución de llamada correspondiente. Se pueden cargar varios complementos al mismo tiempo y las funciones correspondientes en cada complemento se llamarán en secuencia (pero el orden de llamada no tiene nada que ver con el orden de carga).
Después de que QQBot comience a ejecutarse, cada vez que reciba un mensaje QQ, pasará el origen del mensaje, el contenido del mensaje y un objeto QQBot a la función de respuesta del mensaje registrado. en:
bot : QQBot 对象,提供 List/SendTo/Stop/Restart 等接口,详见本文档第五节
contact : QContact 对象,消息的发送者,具有 ctype/qq/uin/nick/mark/card/name 等属性
member : QContact 对象,仅当本消息为 群消息或讨论组消息 时有效,代表实际发消息的成员
content : str 对象,消息内容
contacto representa el remitente del mensaje y su atributo ctype puede ser buddy
/ group
/ discuss
, que representa el objeto amigo/grupo/grupo de discusión, lo que indica que este mensaje es un mensaje de amigo/mensaje de grupo/mensaje de grupo de discusión.
member solo es válido cuando este mensaje es un mensaje de grupo o un mensaje de grupo de discusión, y representa al miembro que realmente envió el mensaje. Su atributo ctype puede ser group-member
/ discuss-member
, que representa el objeto miembro del grupo/miembro del grupo de discusión. Cuando este mensaje es un mensaje de amigo, miembro es igual a Ninguno.
Tanto el contacto como el miembro son objetos QContact. Para conocer el significado de los atributos de diferentes tipos de objetos QContact, consulte: qcontact-attr. Tenga en cuenta que todos los objetos QContact son objetos de solo lectura . Solo se pueden leer sus propiedades, no se pueden configurar y no se le pueden agregar propiedades adicionales.
Puede llamar a la interfaz SendTo del objeto QQBot para enviar mensajes al objeto QContact, pero tenga en cuenta: solo puede enviar mensajes a amigos/grupos/grupos de discusión, pero no a miembros del grupo/miembros del grupo de discusión . En otras palabras, solo se puede llamar a bot.SendTo(contacto, 'xxx'), pero no se puede llamar a bot.SendTo(miembro, 'xxx').
El objeto QQBot proporciona un total de 9 interfaces públicas List/Update/SendTo/Plug/Unplug/Login/Stop/Restart/FreshRestart. Las primeras letras de estas interfaces están todas en mayúscula. Además, se proporciona un atributo público conf para guardar información de configuración global.
En general, no llame ni acceda a otros métodos/propiedades de este objeto. En particular, no llame a estas interfaces en subprocesos secundarios . A continuación se describen las primeras siete interfaces y atributos de configuración.
Si necesita ejecutar o probar la interfaz anterior en IDE o python-shell, primero debe cerrar el proceso qqbot y ejecutar el siguiente código en IDE o python-shell para iniciar sesión:
>>> from qqbot import _bot as bot
>>> bot.Login(['-q', '1234'])
Corresponde al comando list de la Sección 3 de este documento. Devuelve una lista de objetos de contacto (objetos QContact) o Ninguno. El primer parámetro tinfo es el nombre en clave de la lista de contactos y el segundo parámetro es opcional (el formato es el mismo que el tercer parámetro del comando de lista).
El parámetro tinfo se utiliza para representar una lista de contactos. Este parámetro es muy importante en la consulta de contactos. Asegúrese de comprender las dos situaciones siguientes :
El significado de tinfo (caso 1): tinfo puede ser buddy
/ group
/ discuss
, que representan respectivamente lista de amigos/lista de grupo/lista de grupo de discusión. Ejemplo:
# 返回 好友列表:
>>> bot.List('buddy')
# 返回名为 'jack' 的好友的列表:
>>> bot.List('buddy', 'jack')
# 返回 群列表:
>>> bot.List('group')
# 返回名为 “机器人测试” 的群的列表:
>>> bot.List('group', '机器人测试')
El significado de tinfo (Caso 2): tinfo también puede ser un objeto QContact con ctype igual a group
/ discuss
, que representa la lista de miembros del grupo/grupo de discusión. Por ejemplo, la segunda y tercera oración a continuación devuelven la lista de miembros del grupo "Clase 456" y la lista de miembros cuya tarjeta de presentación es "jack" en el grupo respectivamente:
>>> g = bot.List('group', "456班")[0] # g 是一个 Group 对象(群“456班”)
>>> bot.List(g) # 返回 群“456班” 的成员列表
>>> bot.List(g, 'card=jack') # 返回 群“456班” 中名片为 “jack” 的成员列表
Tenga en cuenta que la tercera oración anterior no permite el formato bot.List(g, card='jack').
La secuencia de ejecución interna de la interfaz Lista: primero busque la lista de contactos representada por tinfo en la base de datos de contactos de QQBot, si la lista ya existe en la base de datos, busque dentro de esta lista y devuelva una lista que contenga "todos y la lista de "contactos coincidentes con cinfo"; Si no existe dicha lista en la base de datos, solicite datos del servidor QQ para obtener la lista de contactos. Después de la adquisición exitosa, la lista de contactos se guardará en la base de datos y luego buscará y devolverá una lista que contenga "esta lista". en cinfo lista de "contactos coincidentes"; si ocurre un error durante la solicitud de datos del servidor QQ, se imprimirá la información de falla relevante y se devolverá Ninguno.
El significado del valor de retorno de la interfaz Lista: Devuelve una lista no vacía para representar todos los contactos que coinciden con cinfo en la lista de contactos especificada por tinfo; Devuelve una lista vacía para representar que no hay contactos que coincidan con cinfo en la lista de contactos; Ninguno para representar Error al solicitar la lista de contactos y la información del servidor QQ. No sé si hay contactos coincidentes.
Después de llamar a la interfaz Lista, asegúrese de juzgar el valor de retorno en función de las tres situaciones anteriores antes de ejecutar el código posterior.
Nota: Cuando la interfaz List devuelve una lista no vacía, los elementos de la lista son objetos QContact, no objetos str:
>>> g = bot.List('group')[0] # g 是一个 Group 对象
>>> print([g, type(g), g.qq, g.name, g.uin, g.mark]) # 打印 g 的各项属性
Para conocer el significado de los atributos de diferentes tipos de objetos QContact, consulte: qcontact-attr.
El parámetro tinfo de la interfaz de Actualización tiene el mismo significado que los parámetros en la interfaz de Lista. Al llamar a esta interfaz, se solicitará inmediatamente la lista de contactos correspondiente del servidor QQ y se actualizará la base de datos de contactos, y se bloqueará hasta que la actualización sea exitosa. La actualización más lenta es la lista de amigos. Si hay muchos amigos, es posible que se bloquee durante 5 a 10 segundos. La lista de miembros se actualiza muy rápidamente. Incluso para un grupo grande de 2000 personas, el tiempo de actualización es de sólo 1 a 2 segundos.
Si la actualización se realiza correctamente, se devuelve True; en caso contrario, se devuelve False.
Ejemplo:
# 更新 好友列表 :
>>> bot.Update('buddy')
# 更新 群列表 :
>>> bot.Update('group')
# 更新 某个群的成员列表 :
>>> gl = bot.List('group', "456班")
>>> if gl:
>>> g = gl[0]
>>> bot.Update(g)
Enviar un mensaje a un contacto. El primer parámetro es el objeto QContact y el segundo parámetro es el contenido del mensaje. Recordatorio nuevamente: solo puede enviar mensajes a amigos/grupos/grupos de discusión. No está permitido enviar mensajes a miembros del grupo/miembros del grupo de discusión .
Puede incrustar palabras clave de emoticones como "/sonrisa" en el contenido del mensaje para enviar emoticones a la otra parte. Para obtener más información, consulte facemap.py.
Si el envío es exitoso, se devuelve una cadena (向xx 发消息成功
). De lo contrario, se devuelve una cadena que contiene la causa del error (错误:...
).
Al enviar un mensaje, el mensaje puede enviarse repetidamente. Esto se debe a que el servidor QQ devuelve el código 1202. La versión v2.1.17 ha agregado un parámetro a la interfaz bot.SendTo para este problema: resendOn1202 Si este parámetro es True (valor predeterminado), si el servidor QQ devuelve el código 1202 (lo que indica que el mensaje puede fallar) al enviar un mensaje, También continuará enviándose 3 veces hasta que el código de retorno sea 0. Si este parámetro es Falso, no se intentará reenviar.
Establecerlo en Verdadero puede garantizar que el mensaje se enviará en la mayoría de los casos, pero la desventaja es que a veces un mensaje se enviará repetidamente. Si se establece en False, por el contrario, el mensaje no se enviará repetidamente, pero a veces el mensaje no se podrá enviar.
En resumen, debido a la incertidumbre de este código 1202, no existe una solución perfecta. Seleccione el valor de resendOn1202 según su situación real.
El primer parámetro de contacto debe ser el objeto QContact devuelto por bot.List o el primer parámetro pasado por la función de devolución de llamada onQQMessage. Ejemplo:
# 向 昵称 为 jack 的好友发消息
>>> bl = bot.List('buddy', 'jack')
>>> if bl:
>>> b = bl[0]
>>> bot.SendTo(b, 'hello')
La información de configuración global se guarda en bot.conf. Para obtener detalles sobre cada configuración, consulte la Sección 7 de este documento. Por ejemplo, bot.conf.termServerPort guarda el número de puerto del servidor de línea de comando QQBot y bot.conf.qq guarda el número QQ de este inicio de sesión.
Nota: La información de configuración guardada en bot.conf es de solo lectura. No modifique esta información de configuración.
Además de la función de respuesta onQQMessage mencionada anteriormente, también puede registrar funciones de devolución de llamada para un total de nueve eventos en Init/onQrcode/onStartupComplete/onInterval/onUpdate/onPlug/onUnplug/onExit. Consulte los espacios de muestra para conocer el formato, el significado y el parámetro de la función de devolución de llamada. ejemplos de todos los eventos.
El proceso de ejecución del programa y el tiempo de llamada de cada función de devolución de llamada son los siguientes:
Recordatorio nuevamente: el nombre de la función de devolución de llamada registrada y los parámetros de la función (número y nombre) no deben cambiarse .
Cuando QQBot recibe un mensaje grupal, primero determinará si alguien @ se basa en el contenido del mensaje. Si es así, agregue una marca [@ME]
al comienzo del contenido del mensaje y pásela a la función onQQMessage; de lo contrario, reemplace todo @ME
en el contenido del mensaje con @Me
y páselo a onQQMessage; Por lo tanto, en la función onQQMessage, solo necesita determinar si el contenido contiene @ME
para saber si el remitente del mensaje lo ha @. Por ejemplo:
def onQQMessage ( bot , contact , member , content ):
if '@ME' in content :
bot . SendTo ( contact , member . name + ',艾特我干嘛呢?' )
Tenga en cuenta que si hay otro miembro en el grupo cuyo nombre es el mismo que el comienzo de su propio nombre (por ejemplo: su nombre es ab y el nombre de otro miembro es abc), cuando alguien @abc, se informará falsamente. como @ME, en este caso es necesario modificar la tarjeta de presentación de tu grupo para evitar falsos positivos.
Cuando este QQ envía un mensaje, QQBot también recibirá el mismo mensaje. El objeto bot proporciona un método isMe para determinar si el mensaje se envía por sí mismo:
def onQQMessage ( bot , contact , member , content ):
if bot . isMe ( contact , member ):
print ( 'This is me' )
A partir de 2.1.13, qqbot proporciona un poderoso decorador de funciones: qqbotsched
para personalizar tareas programadas, código de muestra:
from qqbot import qqbotsched
@ qqbotsched ( hour = '11,17' , minute = '55' )
def mytask ( bot ):
gl = bot . List ( 'group' , '456班' )
if gl is not None :
for group in gl :
bot . SendTo ( group , '同志们:开饭啦啦啦啦啦啦!!!' )
Después de cargar el código anterior en forma de complemento, se enviará automáticamente un mensaje al grupo "Clase 456" cada 11:55 y 17:55: "Camaradas: ¡¡¡La cena está servida!!!"
El decorador qqbotsched acepta un total de 11 parámetros de palabras clave: año, mes, día, semana, día de la semana, hora, minuto, segundo, fecha de inicio, fecha de finalización, zona horaria. Cada parámetro representa el valor que debe coincidir con el componente de tiempo personalizado de la tarea. Por ejemplo: hora='11,17' significa que la tarea debe ejecutarse a las 11:xx o 17:xx, minuto='55' significa que la tarea debe ejecutarse a las xx:55, minuto='0-55/5' significa que la tarea debe ejecutarse a las xx: 00, xx:05, xx:10, ..., xx:55 ejecuta la tarea, day_of_week='mon-fri' (o '0-4') indica que la tarea debe ejecutarse de lunes a viernes.
qqbotsched es una encapsulación simple del apscheduler del marco de tareas programadas de Python, y sus parámetros deben ingresarse en formato crontab en sistemas Unix. Para obtener información sobre crontab y el marco de tareas programadas de Python, apscheduler, consulte los siguientes materiales de referencia:
Para obtener detalles sobre el formato de cada parámetro crontab, consulte:
Registrar funciones de devolución de llamada y personalizar tareas programadas es la única forma de extender QQBot. Al escribir estas funciones, preste atención a lo siguiente:
Al iniciar sesión en WebQQ, debe usar su teléfono móvil QQ para escanear la imagen del código QR. En QQBot, la imagen del código QR se puede mostrar en los siguientes cuatro modos:
El modo GUI es el modo predeterminado y solo está disponible en PC. El modo buzón se puede utilizar en computadoras personales y servidores remotos. El modo servidor generalmente solo se usa en sistemas con direcciones IP públicas. Si utiliza el buzón de QQ para recibir el código QR, después de enviar la imagen del código QR, el cliente QQ móvil recibirá inmediatamente una notificación. Abra el correo electrónico en el cliente QQ móvil y luego mantenga presionado el código QR para escanear. El modo de texto es conveniente para usar durante el proceso de desarrollo o la implementación del servidor y proporciona a los desarrolladores un acceso directo para iniciar sesión en QQ.
Nota: Cuando el modo de buzón de correo/modo de servidor/modo de texto está activado, el modo GUI se desactiva y la imagen del código QR no aparecerá automáticamente al iniciar sesión.
Se creará un administrador de códigos QR (objeto QrcodeManager) cada vez que inicie sesión. El administrador de códigos QR seleccionará el método de visualización de la imagen del código QR según el archivo de configuración y los parámetros de la línea de comando.
El archivo de configuración es ~/.qqbot-tmp/v2.x.conf ( ~ representa el directorio de inicio del usuario, que es C:Usersxxx en win7 y /home/xxx en Linux. Se configurará automáticamente después de ejecutarlo). QQBot por primera vez. Cree este archivo de configuración con el siguiente contenido:
{
# QQBot 的配置文件
# 使用 qqbot -u somebody 启动程序时,依次加载:
# 根配置 -> 默认配置 -> 用户 somebody 的配置 -> 命令行参数配置
# 使用 qqbot 启动程序时,依次加载:
# 根配置 -> 默认配置 -> 命令行参数配置
# 用户 somebody 的配置
"somebody" : {
# QQBot-term (HTTP-API) 服务器端口号(该服务器监听 IP 为 127.0.0.1 )
# 设置为 0 则不会开启本服务器(此时 qq 命令和 HTTP-API 接口都无法使用)。
"termServerPort" : 8188,
# 二维码 http 服务器 ip,请设置为公网 ip 或空字符串
"httpServerIP" : "",
# 二维码 http 服务器端口号
"httpServerPort" : 8189,
# 自动登录的 QQ 号
"qq" : "3497303033",
# 接收二维码图片的邮箱账号
"mailAccount" : "[email protected]",
# 该邮箱的 IMAP/SMTP 服务授权码
"mailAuthCode" : "feregfgftrasdsew",
# 是否以文本模式显示二维码
"cmdQrcode" : False,
# 显示/关闭调试信息
"debug" : False,
# QQBot 掉线后自动重启
"restartOnOffline" : False,
# 在后台运行 qqbot ( daemon 模式)
"daemon": False,
# 完成全部联系人列表获取之后才启动 QQBot
"startAfterFetch" : False,
# 插件目录
"pluginPath" : ".",
# 启动时需加载的插件
"plugins" : [],
# 插件的配置(由用户自定义)
"pluginsConf" : {},
},
# 可以在 默认配置 中配置所有用户都通用的设置
"默认配置" : {
"qq" : "",
"pluginPath" : "",
"plugins" : [
'qqbot.plugins.sampleslots',
'qqbot.plugins.schedrestart',
],
"pluginsConf" : {
'qqbot.plugins.schedrestart': '8:00',
}
},
# # 注意:根配置是固定的,用户无法修改(在本文件中修改根配置不会生效)
# "根配置" : {
# "termServerPort" : 8188,
# "httpServerIP" : "",
# "httpServerPort" : 8189,
# "qq" : "",
# "mailAccount" : "",
# "mailAuthCode" : "",
# "cmdQrcode" : False,
# "debug" : False,
# "restartOnOffline" : False,
# "daemon" : False,
# "startAfterFetch" : False,
# "pluginPath" : "",
# "plugins" : [],
# "pluginsConf" : {}
# },
}
Puede agregar su propia configuración de usuario en el archivo de configuración (es decir, agregar un nuevo elemento en el diccionario del archivo y la clave de este elemento representa un usuario. Por ejemplo, el elemento alguien que ya está en el archivo representa al usuario). nombró a alguien, cuando ejecute QQBot, ingrese qqbot -u alguien y se cargarán las configuraciones en el proyecto de alguien.
A continuación se describen las funciones de cada configuración en el archivo de configuración. El siguiente contenido supone que la configuración de alguien se ha modificado y se ha ejecutado en el modo qqbot -u alguien .
Si necesita utilizar el modo de buzón para mostrar el código QR, puede configurar los elementos mailAccount y mailAuthCode como la cuenta del buzón y el código de autorización respectivamente. Después de ejecutarlo, el administrador de códigos QR enviará la imagen del código QR al buzón.
Nota: El código de autorización no es la contraseña de inicio de sesión del buzón, sino el código de autorización proporcionado por el proveedor del servicio del buzón para activar el servicio IMAP/SMTP (recordatorio: el servicio POP3/SMTP no puede activar esto en el buzón). la configuración del buzón del servicio de la versión web y obtenga el código de autorización. Si solo se define mailAccount pero no mailAuthCode, será necesario ingresar manualmente el código de autorización cuando se inicie el programa.
El modo buzón ha sido probado en buzones QQ, NetEase y Google.
Si necesita utilizar el modo servidor, puede configurar los elementos httpServerIP y httpServerPort. En términos generales, deben configurarse en la IP de la red pública. Una vez activado el modo de servidor, puede acceder a la imagen del código QR a través de http://{httpServerIP}:{httpServerPort}/{any}. donde {cualquiera} puede ser cualquier cadena de números o letras que no esté vacía.
Cuando el modo de buzón y el modo de servidor están activados al mismo tiempo, la imagen real no se enviará al enviar un correo electrónico. Solo se enviará la dirección de la imagen al buzón y solo se enviará una vez el código QR. caduca, simplemente actualice el correo electrónico. Si solo activa el modo de buzón, se enviará la imagen real al enviar un correo electrónico. Cuando el código QR caduque, deberá configurar el correo electrónico como leído (el correo electrónico se leerá después de hacer clic en el correo electrónico con QQ en su. teléfono móvil) antes de que se envíen las últimas imágenes del código QR.
Si el elemento cmdQrcode está configurado en Verdadero, el código QR se mostrará en modo texto en el término. Nota: Para usar el modo texto, debe instalar las bibliotecas almohada y wcwidth usted mismo. Puede usar pip para instalarlas.
Cada usuario en el archivo de configuración tiene el elemento qq. Si este elemento se ha configurado en un determinado número QQ, QQBot iniciará sesión automáticamente utilizando la información de inicio de sesión guardada en el último inicio de sesión de este número QQ cuando se inicia.
Si el elemento restartOnOffline está configurado en True en el archivo de configuración, QQBot se reiniciará automáticamente cuando se desconecte o finalice con un error.
Esta opción solo es válida en sistemas tipo UNIX. Configurar la opción demonio en la configuración en Verdadero ejecutará el programa en modo demonio. En este punto, la salida estándar y el error estándar se redirigen al archivo daemon-$qq.log (donde $qq es el valor de la opción qq en la configuración).
En circunstancias normales, QQBot se iniciará inmediatamente después de escanear el código QR para iniciar sesión. Solo obtendrá la lista de contactos y actualizará la base de datos de contactos cuando sea necesario. Si startAfterFetch en el archivo de configuración está configurado en True, QQBot esperará a que se obtengan todas las listas de contactos antes de comenzar . Tenga en cuenta que si hay más contactos, llevará más tiempo.
Después de iniciar QQBot, se abrirá un servidor QQBot-term para monitorear los comandos de operación enviados por los usuarios a través de la herramienta de línea de comandos qq y los comandos de operación enviados a través de la interfaz API HTTP. La IP de escucha de este servidor es siempre 127.0.0.1. y el número de puerto de escucha predeterminado es 8188, este número de puerto se puede modificar modificando el valor de termServerPort.
Si el número de puerto del servidor QQBot-term configurado no es el 8188 predeterminado, cuando ejecute el comando qq, deberá especificar el número de puerto en el primer parámetro, como por ejemplo:
$ qq 8100 send buddy jack hello
$ qq 8100 list group-member chatbot
De manera similar, también es necesario cambiar el número de puerto de la interfaz API HTTP, como por ejemplo: http://127.0.0.1:8100/send/buddy/jack/hello.
Si no necesita utilizar el comando qq y la interfaz HTTP-API, puede configurar este número de puerto en 0 y el servidor QQBot-term no se abrirá en este momento.
Si necesita iniciar sesión en varios números QQ en la misma máquina, puede abrir directamente varios procesos qqbot en diferentes terminales para iniciar sesión. Sin embargo, cada proceso qqbot debe establecer su propio termServerPort y httpServerPort (o todos configurados en 0 o valor vacío). ), de lo contrario se producirá un conflicto con el número de puerto.
Si el elemento de depuración está configurado en Verdadero, la información de depuración se imprimirá durante la ejecución.
Generalmente, los complementos deben almacenarse en el directorio de importación del sistema o en el directorio ~/.qqbot-tmp/plugins. Puede configurar otros directorios de almacenamiento en la opción pluginPath. Además, en la opción de complementos, puede especificar los complementos que deben cargarse cuando se inicia QQBot.
Todas las opciones en el archivo de configuración tienen parámetros de línea de comando correspondientes, y las opciones ingresadas en los parámetros de línea de comando tienen mayor prioridad que las del archivo de configuración. Ingrese qqbot -h para ver todos los formatos de parámetros de la línea de comando.
Hay cuatro niveles de configuración en el programa y sus prioridades son las siguientes:
使用 qqbot -u somebody 启动程序时,依次加载:
根配置 -> 默认配置 -> 用户 somebody 的配置 -> 命令行参数配置
使用 qqbot 启动程序时,依次加载:
根配置 -> 默认配置 -> 命令行参数配置
Entre ellos: la configuración raíz es fija y los usuarios no pueden modificarla; la configuración predeterminada y la configuración del usuario pueden ser modificadas por los usuarios en el archivo v2.x.conf, finalmente, las configuraciones también se pueden ingresar en los parámetros de la línea de comando;
Cuando qqbot se esté ejecutando, buscará/creará los siguientes archivos/directorios en el directorio de trabajo:
El directorio de trabajo predeterminado es ~/.qqbot-tmp/. Puede especificar otros directorios de trabajo a través del parámetro de línea de comando -b|--bench al iniciar qqbot, por ejemplo: qqbot -b bench.
Un complemento es en realidad un módulo de Python, por lo que puede ser un archivo de Python o un paquete de Python. qqbot buscará complementos en los siguientes directorios según el nombre del complemento:
método de conexión en caliente
Puede cargar/descargar complementos dinámicamente durante la ejecución de qqbot. Hay tres métodos:
Los dos primeros métodos son llamados por procesos externos del proceso qqbot y el tercer método se utiliza dentro del proceso qqbot. No utilice los dos primeros métodos dentro del proceso qqbot.
Nota: Los complementos cargados mediante el método de conexión en caliente se perderán después de que se reinicie qqbot.
modo de conexión automática al inicio
También puede cargar complementos automáticamente cuando se inicia qqbot. Simplemente especifique el nombre del complemento que debe cargarse en la opción de complementos en la configuración (parámetro de línea de comando -pl|--plugins). Estos complementos se cargarán al inicio, antes de iniciar sesión.
Además, si hay un paquete llamado qqbotdefault en el sistema (o en el directorio de complementos), todos los submódulos del paquete se cargarán automáticamente como complementos al inicio (nota: qqbotdefault en sí no se cargará como un complemento).
La escritura de complementos implica principalmente escribir funciones de devolución de llamada o funciones de tareas programadas. Consulte las Secciones 4 a 6 para obtener más detalles.
nombre | autor de github | Descripción de la función | Si se carga de forma predeterminada |
---|---|---|---|
qqbot.plugins.sampleslots | pandolia | Ejemplo de función de devolución de llamada | Sí |
qqbot.plugins.schedrestart | pandolia | Reinicio programado | Sí |
qqbot.plugins.miniirc | pandolia | servidor IRC | No |
contraseñainiciar sesión | pandolia | Inicie sesión usando nombre de usuario-contraseña | No |
bloque de publicidad | feisuweb | Bloqueo de anuncios grupales | No |
registro de chat | feisuweb | Registro de contenido de chat | No |
Si tiene algún complemento útil para compartir, envíeme un correo electrónico.
En el sistema Linux, dado que no se puede utilizar el cliente QQ, se puede utilizar el complemento qqbot.plugins.miniirc para implementar la función de chat IRC. Método de carga: qq plug qqbot.plugins.miniirc, o cargar al inicio: qqbot -pl qqbot.plugins.miniirc, o agregar qqbot.plugins.miniirc
a la opción de complementos en el archivo de configuración.
Después de cargar el complemento, se abrirá un microservidor IRC en el puerto 6667. Los usuarios pueden usar clientes IRC (como weechat, irssi, etc.) para conectarse a este servidor y lograr el chat en modo de línea de comando. A continuación se utiliza weechat como ejemplo para presentar cómo usarlo:
启动 weechat : weechat
连接本服务器: /connect localhost
进入 群聊天 会话: /join group-name
进入 讨论组聊天 会话: /join !discuss-name
进入 好友聊天 会话: /query buddy-name
进入 聊天会话 后,直接敲入文本并回车就可以向对方发送消息了。所有接收到的 QQ 消息也会被转发给相应的 聊天会话 。
在聊天会话之间切换: ctrl+P 或 ctrl+N
显示所有 群和讨论组 的名称: /list
Las anteriores son casi todas las funciones proporcionadas por este microservidor IRC, pero son suficientes para chatear con amigos/grupos/grupos de discusión de QQ.
QqBot se refiere a los siguientes proyectos de código abierto:
Me gustaría agradecer a los tres autores anteriores por su intercambio desinteresado, especialmente Scienjus por su análisis detallado y detallado del protocolo SmartQQ.