qqbot est un robot QQ implémenté en python et basé sur le protocole SmartQQ de Tencent. Il peut fonctionner sur les plateformes Linux, Windows et Mac OSX.
L'adresse github de ce projet : https://github.com/pandolia/qqbot
Vous pouvez le faire en étendant qqbot :
Pour une utilisation sous Python 2.7/3.4+, installez avec pip :
pip install qqbot
Ou téléchargez le code source, décompressez-le, placez-le dans le répertoire et exécutez : pip install
.
Entrez : qqbot sur la ligne de commande pour démarrer un QQBot.
Pendant le processus de démarrage, une image de code QR apparaîtra automatiquement. Vous devez utiliser le client mobile QQ pour scanner le code et autoriser la connexion. Après un démarrage réussi, les informations de connexion seront enregistrées dans un fichier local lors du prochain démarrage, vous pourrez saisir : qqbot -q qq number . Essayez d'abord de restaurer les informations de connexion à partir du fichier local (pas besoin de scanner manuellement le code). . Seule la récupération échoue. Vous devrez scanner manuellement le code QR pour vous connecter si la connexion réussit ou si les informations de connexion ont expiré. De manière générale, les informations de connexion enregistrées expireront après 2 jours.
Remarque : sous Linux, la commande gvfs-open ou shotwell est requise dans le système pour afficher automatiquement l'image du code QR (en général, les systèmes sur lesquels le système de fichiers virtuel GNOME gvfs est installé contiendront l'une de ces deux commandes). Sous Windows 10, le programme d'ouverture par défaut des fichiers image png doit être défini dans le système pour afficher automatiquement l'image du code QR.
Si le système ne peut pas afficher automatiquement l'image du code QR, vous pouvez ouvrir manuellement le fichier image et scanner le code, ou vous pouvez définir le mode d'affichage du code QR en mode boîte aux lettres, mode serveur ou mode texte pour scanner le code. Pour plus de détails, voir la section 7 de ce document.
Une fois QQBot démarré, utilisez la commande qq dans une autre fenêtre de console pour faire fonctionner QQBot. Les commandes suivantes sont actuellement fournies :
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
La commande list fournit de puissantes fonctions de requête et de recherche de contacts. Les exemples d'utilisation sont les suivants :
# 列出所有好友
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 les troisième et quatrième paramètres sont au format key=val, ils doivent être au format name=xx|nick=xx|mark=xx|card=xx|qq=xx s'ils ne sont pas au format. key=val, appuyer Le principe de traitement est le suivant : s'il s'agit d'une chaîne de nombres, requête par numéro QQ, sinon, requête par nom.
S'il existe un nom en double, tous les contacts portant le nom en double seront répertoriés. comme:
qq list group 机器人测试
Tous les groupes nommés « Bot Test » seront répertoriés.
Si « :like : » est ajouté aux troisième et quatrième paramètres de la commande list, la recherche sera basée sur des modèles de correspondance partielle. Les exemples d'utilisation sont les suivants :
# 列出名称中含有 “李” 的好友
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
À partir de la version v2.2.5, la commande list utilise un tableau pour afficher la liste de contacts. Un exemple de son style de sortie est le suivant :
Afin de garantir l'effet d'affichage du tableau dans le terminal, il est recommandé de définir la police de sortie du terminal sur consolas et le nombre maximum de caractères pouvant être imprimés dans chaque ligne est supérieur à 120. A noter également : Afin de garantir l'effet d'affichage du tableau, lorsque le nom, la carte de visite et autres attributs du contact sont trop longs ou contiennent des caractères spéciaux, ces attributs seront tronqués ou filtrés avant d'être envoyés au terminal.
La commande update met à jour la liste de contacts spécifiée et la signification de ses paramètres est la même que celle de la commande list, par exemple :
# 更新好友列表
qq update buddy
# 更新群列表
qq update group
# 更新 群“456班” 的成员列表
qq update group-member 456班
Le troisième paramètre de la commande send a le même format que le troisième paramètre de la commande list. Veuillez noter qu'en cas de nom en double, un message sera envoyé à tous les contacts portant le même nom. Notez également que le deuxième paramètre ne peut être que copain/groupe/discussion, et non membre du groupe/membre de discussion. Exemple:
# 给 好友“jack” 发消息 “你好”
qq send buddy jack 你好
# 给 群“198班” 发消息 “大家好”
qq send group 198班 大家好
# 给 QQ 为 12345 的好友发消息
qq send buddy 12345 xxx
# 给讨论组发消息
qq send discuss MyDiscuss hello
Vous pouvez intégrer des mots-clés d'émoticônes tels que "/cute" dans le contenu du message pour envoyer des émoticônes à l'autre partie. Voir facemap.py pour plus de détails. Vous pouvez également utiliser les deux caractères d'échappement n et t dans le contenu du message (par exemple : envoyer à copain jack première lignen deuxième ligne).
Toutes les commandes ci-dessus fournissent les interfaces API HTTP correspondantes que les développeurs Web front-end peuvent appeler. L'adresse URL de l'interface est http://127.0.0.1:8188/{command}. Vous devez uniquement utiliser "/" pour chaque paramètre. de la commande après qq. Séparez et remplacez simplement la commande dans l'URL, par exemple : http://127.0.0.1:8188/send/buddy/jack/hello. , voir urltestbot.md pour d'autres exemples. Remarque : Si la commande contient des caractères chinois ou spéciaux, le codage URL (utf8) doit être effectué en premier. Par exemple, appelez http://127.0.0.1:8188/send/buddy/jack/nihao%20%E4%BD%. A0%E5 %A5%BD%20wohao enverra le message "nihao bonjour wohao". (Astuce : en JavaScript, vous pouvez utiliser la fonction encodeURIComponent pour l'encodage).
De plus, après le démarrage de QQBot, si vous utilisez ce compte QQ pour envoyer un message « --version » à un groupe/groupe de discussion sur d'autres clients (tels que QQ mobile), QQBot répondra automatiquement au groupe/groupe de discussion : "QQBot-v2.xx".
Il est très simple d'implémenter votre propre robot QQ. Il vous suffit de définir votre propre fonction de réponse aux messages et de la charger sous forme de plug-in. Exemple de code :
# -*- 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 ()
Notez que le nom de la fonction de réponse enregistrée ci-dessus doit être "onQQMessage" et que les paramètres de la fonction doivent également être cohérents avec ce qui précède.
Enregistrez le code ci-dessus sous sample.py (notez qu'il est enregistré en tant que fichier codé en utf8). Placez-le dans le répertoire ~/.qqbot-tmp/plugins/ ( ~ représente le répertoire personnel de l'utilisateur, C:Usersxxx sous win7), ou dans un répertoire pouvant être importé dans le système (comme Lib/ dans le python répertoire d'installation) répertoire des packages du site).
Après cela, laissez le processus qqbot précédent en cours d'exécution et entrez l'échantillon de plug qq dans une autre console. Ensuite, la fonction onQQMessage de ce fichier peut être enregistrée dans l'événement correspondant de QQBot. A ce moment, si vous utilisez un autre QQ pour envoyer le message "-hello" à ce QQ, il répondra automatiquement "Bonjour, je suis un robot QQ" . Si vous envoyez le message "-stop" , le robot QQ le sera. fermé.
Entrez qq unplug sample sur la console pour désinstaller ce plug-in et la fonction de rappel correspondante. Plusieurs plug-ins peuvent être chargés en même temps, et les fonctions correspondantes dans chaque plug-in seront appelées dans l'ordre (mais l'ordre d'appel n'a rien à voir avec l'ordre de chargement).
Une fois que QQBot démarre, chaque fois qu'il reçoit un message QQ, il transmet la source du message, le contenu du message et un objet QQBot à la fonction de réponse au message enregistrée. dans:
bot : QQBot 对象,提供 List/SendTo/Stop/Restart 等接口,详见本文档第五节
contact : QContact 对象,消息的发送者,具有 ctype/qq/uin/nick/mark/card/name 等属性
member : QContact 对象,仅当本消息为 群消息或讨论组消息 时有效,代表实际发消息的成员
content : str 对象,消息内容
contact représente l'expéditeur du message, et son attribut ctype peut être buddy
/ group
/ discuss
, qui représente l'objet ami/groupe/groupe de discussion, indiquant que ce message est un message d'ami/message de groupe/message de groupe de discussion.
member n'est valide que lorsque ce message est un message de groupe ou un message de groupe de discussion et représente le membre qui a réellement envoyé le message. Son attribut ctype peut être group-member
/ discuss-member
, qui représente l'objet membre du groupe/membre du groupe de discussion. Lorsque ce message est un message d'ami, le membre est égal à Aucun.
Le contact et le membre sont des objets QContact. Pour la signification des attributs des différents types d'objets QContact, voir : qcontact-attr. Notez que tous les objets QContact sont des objets en lecture seule . Seules ses propriétés peuvent être lues, ses propriétés ne peuvent pas être définies et des propriétés supplémentaires ne peuvent pas y être ajoutées.
Vous pouvez appeler l'interface SendTo de l'objet QQBot pour envoyer des messages à l'objet QContact, mais veuillez noter : vous ne pouvez envoyer des messages qu'à des amis/groupes/groupes de discussion, mais pas aux membres du groupe/membres du groupe de discussion . En d’autres termes, seul bot.SendTo(contact, 'xxx') peut être appelé, mais bot.SendTo(member, 'xxx') ne peut pas être appelé.
L'objet QQBot fournit un total de 9 interfaces publiques List/Update/SendTo/Plug/Unplug/Login/Stop/Restart/FreshRestart. Les premières lettres de ces interfaces sont toutes en majuscules. De plus, un attribut public conf est fourni pour enregistrer les informations de configuration globale.
En général, n’appelez/n’accédez pas à d’autres méthodes/propriétés de cet objet. En particulier, n'appelez pas ces interfaces dans les threads enfants . Ce qui suit décrit les sept premières interfaces et attributs de conf.
Si vous devez exécuter ou tester l'interface ci-dessus dans l'IDE ou python-shell, vous devez d'abord fermer le processus qqbot et exécuter le code suivant dans l'IDE ou python-shell pour vous connecter :
>>> from qqbot import _bot as bot
>>> bot.Login(['-q', '1234'])
Correspond à la commande list de la section 3 de ce document. Renvoie une liste d'objets contact (objets QContact) ou Aucun. Le premier paramètre tinfo est le nom de code de la liste de contacts, et le deuxième paramètre est facultatif (le format est le même que le troisième paramètre de la commande list).
Le paramètre tinfo est utilisé pour représenter une liste de contacts. Ce paramètre est très important dans la requête de contact. Assurez-vous de comprendre les deux situations suivantes :
La signification de tinfo (cas 1) : tinfo peut être buddy
/ group
/ discuss
, qui représentent respectivement une liste d'amis/une liste de groupes/une liste de groupes de discussion. Exemple:
# 返回 好友列表:
>>> bot.List('buddy')
# 返回名为 'jack' 的好友的列表:
>>> bot.List('buddy', 'jack')
# 返回 群列表:
>>> bot.List('group')
# 返回名为 “机器人测试” 的群的列表:
>>> bot.List('group', '机器人测试')
La signification de tinfo (Cas 2) : tinfo peut également être un objet QContact avec ctype égal à group
/ discuss
, représentant la liste des membres du groupe/groupe de discussion. Par exemple, les deuxième et troisième phrases ci-dessous renvoient respectivement la liste des membres du groupe « Classe 456 » et la liste des membres dont la carte de visite est « jack » dans le groupe :
>>> g = bot.List('group', "456班")[0] # g 是一个 Group 对象(群“456班”)
>>> bot.List(g) # 返回 群“456班” 的成员列表
>>> bot.List(g, 'card=jack') # 返回 群“456班” 中名片为 “jack” 的成员列表
Notez que la troisième phrase ci-dessus n'autorise pas le format bot.List(g, card='jack').
La séquence d'exécution interne de l'interface List : recherchez d'abord la liste de contacts représentée par tinfo dans la base de données de contacts de QQBot, si la liste existe déjà dans la base de données, recherchez dans cette liste et renvoyez une liste contenant la liste "tous" et "cinfo correspondant aux contacts" ; ; s'il n'y a pas de telle liste dans la base de données, demandez des données au serveur QQ pour obtenir la liste de contacts. Après une acquisition réussie, la liste de contacts sera enregistrée dans la base de données, puis recherchera et renverra une liste contenant "cette liste" toutes. dans cinfo liste des « contacts correspondants » ; si une erreur se produit lors de la demande de données auprès du serveur QQ, les informations d'échec pertinentes seront imprimées et Aucune ne sera renvoyée.
La signification de la valeur de retour de l'interface List : Renvoie une liste non vide pour représenter tous les contacts correspondant à cinfo dans la liste de contacts spécifiée par tinfo ; Renvoie une liste vide pour représenter qu'il n'y a aucun contact correspondant à cinfo dans la liste de contacts ; Aucun pour représenter La demande de liste de contacts et d'informations auprès du serveur QQ a échoué. Je ne sais pas s'il existe des contacts correspondants.
Après avoir appelé l'interface List, assurez-vous de juger la valeur de retour en fonction des trois situations ci-dessus avant d'exécuter le code suivant.
Remarque : Lorsque l'interface List renvoie une liste non vide, les éléments de la liste sont des objets QContact, pas des objets str :
>>> g = bot.List('group')[0] # g 是一个 Group 对象
>>> print([g, type(g), g.qq, g.name, g.uin, g.mark]) # 打印 g 的各项属性
Pour la signification des attributs des différents types d'objets QContact, voir : qcontact-attr.
Le paramètre tinfo de l'interface Update a la même signification que les paramètres de l'interface List. L'appel de cette interface demandera immédiatement la liste de contacts correspondante au serveur QQ et mettra à jour la base de données de contacts, et se bloquera jusqu'à ce que la mise à jour soit réussie. La mise à jour la plus lente est la liste d'amis. S'il y a beaucoup d'amis, elle peut être bloquée pendant 5 à 10 secondes. La liste des membres est mise à jour très rapidement Même pour un grand groupe de 2 000 personnes, le temps de mise à jour n'est que de 1 à 2 secondes.
Si la mise à jour réussit, True est renvoyé ; sinon, False est renvoyé.
Exemple:
# 更新 好友列表 :
>>> bot.Update('buddy')
# 更新 群列表 :
>>> bot.Update('group')
# 更新 某个群的成员列表 :
>>> gl = bot.List('group', "456班")
>>> if gl:
>>> g = gl[0]
>>> bot.Update(g)
Envoyer un message à un contact. Le premier paramètre est l'objet QContact et le deuxième paramètre est le contenu du message. Rappel : vous ne pouvez envoyer des messages qu'à des amis/groupes/groupes de discussion. Vous n'êtes pas autorisé à envoyer des messages aux membres du groupe/membres du groupe de discussion .
Vous pouvez intégrer des mots-clés d'émoticônes tels que « /smile » dans le contenu du message pour envoyer des émoticônes à l'autre partie. Pour plus de détails, consultez facemap.py.
Si l'envoi réussit, une chaîne est renvoyée (向xx 发消息成功
). Sinon, une chaîne contenant la cause de l'erreur (错误:...
) est renvoyée.
Lors de l'envoi d'un message, le message peut être envoyé à plusieurs reprises. En effet, le serveur QQ renvoie le code 1202. La version v2.1.17 a ajouté un paramètre à l'interface bot.SendTo pour ce problème : resendOn1202. Si ce paramètre est True (valeur par défaut), si le serveur QQ renvoie le code 1202 (indiquant que le message peut échouer) lors de l'envoi d'un message, il continuera également à être envoyé 3 fois jusqu'à ce que le code retour soit 0. Si ce paramètre est False, aucun renvoi ne sera tenté.
Le définir sur True peut garantir que le message sera envoyé dans la plupart des cas, mais l'inconvénient est que parfois un message sera envoyé à plusieurs reprises. S'il est défini sur False, au contraire, le message ne sera pas envoyé à plusieurs reprises, mais parfois le message ne peut pas être envoyé.
Bref, en raison de l’incertitude de ce code 1202, il n’existe pas de solution parfaite. Veuillez sélectionner la valeur de resendOn1202 en fonction de votre situation réelle.
Le premier paramètre contact doit être l'objet QContact renvoyé par bot.List ou le premier paramètre transmis par la fonction de rappel onQQMessage. Exemple:
# 向 昵称 为 jack 的好友发消息
>>> bl = bot.List('buddy', 'jack')
>>> if bl:
>>> b = bl[0]
>>> bot.SendTo(b, 'hello')
Les informations de configuration globale sont enregistrées dans bot.conf. Pour plus de détails sur chaque configuration, voir la section 7 de ce document. Par exemple, bot.conf.termServerPort enregistre le numéro de port du serveur de ligne de commande QQBot et bot.conf.qq enregistre le numéro QQ de cette connexion.
Remarque : Les informations de configuration enregistrées dans bot.conf sont en lecture seule. Veuillez ne pas modifier ces informations de configuration.
En plus de la fonction de réponse onQQMessage mentionnée ci-dessus, vous pouvez également enregistrer des fonctions de rappel pour un total de neuf événements onInit/onQrcode/onStartupComplete/onInterval/onUpdate/onPlug/onUnplug/onExit. Veuillez consulter les sampleslots pour le format, la signification et le paramètre de la fonction de rappel. exemples de tous les événements py.
Le processus d'exécution du programme et le timing d'appel de chaque fonction de rappel sont les suivants :
Rappel encore : le nom de la fonction de rappel enregistrée et les paramètres de la fonction (numéro et nom) ne doivent pas être modifiés .
Lorsque QQBot reçoit un message de groupe, il déterminera d'abord si quelqu'un s'est @ lui-même en fonction du contenu du message. Si tel est le cas, ajoutez une marque [@ME]
au début du contenu du message et transmettez-la à la fonction onQQMessage ; sinon, remplacez tous @ME
dans le contenu du message par @Me
et transmettez-le à onQQMessage. Par conséquent, dans la fonction onQQMessage, il vous suffit de déterminer si le contenu contient @ME
pour savoir si vous avez été @ par l'expéditeur du message. Par exemple:
def onQQMessage ( bot , contact , member , content ):
if '@ME' in content :
bot . SendTo ( contact , member . name + ',艾特我干嘛呢?' )
Veuillez noter que s'il y a un autre membre dans le groupe dont le nom est le même que le début de votre propre nom (par exemple : votre nom est ab et le nom d'un autre membre est abc), alors lorsque quelqu'un @abc, cela sera faussement signalé. comme @ME, dans ce cas, vous devez modifier la carte de visite de votre groupe pour éviter les faux positifs.
Lorsque ce QQ envoie un message, QQBot recevra également le même message. L'objet bot fournit une méthode isMe pour déterminer si le message est envoyé par lui-même :
def onQQMessage ( bot , contact , member , content ):
if bot . isMe ( contact , member ):
print ( 'This is me' )
À partir de la version 2.1.13, qqbot fournit un puissant décorateur de fonctions - qqbotsched
pour personnaliser les tâches planifiées, exemple de code :
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 , '同志们:开饭啦啦啦啦啦啦!!!' )
Après chargement du code ci-dessus sous forme de plug-in, un message sera automatiquement envoyé au groupe « Classe 456 » tous les 11h55 et 17h55 : « Camarades : Le dîner est servi !!! »
Le décorateur qqbotsched accepte un total de 11 paramètres de mots clés : année, mois, jour, semaine, jour_de_la_semaine, heure, minute, seconde, date_de_début, date_de_fin, fuseau horaire. Chaque paramètre représente la valeur à laquelle le composant temporel personnalisé de la tâche doit correspondre. Par exemple : hour='11,17' signifie que la tâche doit être exécutée à 11:xx ou 17:xx, minute='55' signifie que la tâche doit être exécutée à xx:55, minute='0-55/5'. signifie que la tâche doit être exécutée à xx : 00, xx:05, xx:10, ..., xx:55 exécute la tâche, day_of_week='mon-fri' (ou '0-4') indique que la tâche doit être exécuté du lundi au vendredi.
qqbotsched est une simple encapsulation du framework de tâches planifiées de Python apscheduler, et ses paramètres doivent être saisis au format crontab dans les systèmes Unix. Pour plus d’informations sur crontab et apscheduler, le cadre de tâches planifiées de Python, veuillez consulter les documents de référence suivants :
Pour plus de détails sur le format de chaque paramètre crontab, voir :
L'enregistrement des fonctions de rappel et la personnalisation des tâches planifiées sont le seul moyen d'étendre QQBot. Lors de l'écriture de ces fonctions, veuillez prêter attention aux points suivants :
Lorsque vous vous connectez à WebQQ, vous devez utiliser votre téléphone mobile QQ pour scanner l'image du code QR Dans QQBot, l'image du code QR peut être affichée dans les quatre modes suivants :
Le mode GUI est le mode par défaut et n'est disponible que sur les PC. Le mode boîte aux lettres peut être utilisé sur des ordinateurs personnels et des serveurs distants. Le mode serveur n'est généralement utilisé que dans les systèmes dotés d'adresses IP publiques. Si vous utilisez la boîte aux lettres QQ pour recevoir le code QR, après avoir envoyé l'image du code QR, le client QQ mobile recevra immédiatement une notification. Ouvrez l'e-mail sur le client QQ mobile, puis appuyez longuement sur le code QR pour le scanner. Le mode texte est pratique à utiliser pendant le processus de développement ou le déploiement du serveur et fournit aux développeurs un raccourci pour se connecter à QQ.
Remarque : Lorsque le mode boîte aux lettres/mode serveur/mode texte est activé, le mode GUI est désactivé et l'image du code QR n'apparaîtra pas automatiquement lors de la connexion.
Un gestionnaire de code QR (objet QrcodeManager) sera créé à chaque connexion. Le gestionnaire de code QR sélectionnera la méthode d'affichage de l'image du code QR en fonction du fichier de configuration et des paramètres de ligne de commande.
Le fichier de configuration est ~/.qqbot-tmp/v2.x.conf ( ~ représente le répertoire personnel de l'utilisateur, qui est C:Usersxxx sous win7 et /home/xxx sous Linux. Il sera automatiquement configuré après l'exécution). QQBot pour la première fois. Créez ce fichier de configuration avec le contenu suivant :
{
# 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" : {}
# },
}
Vous pouvez ajouter votre propre configuration utilisateur dans le fichier de configuration (c'est-à-dire ajouter un nouvel élément dans le dictionnaire du fichier, et la clé de cet élément représente un utilisateur. Par exemple, l'élément quelqu'un déjà dans le fichier représente l'utilisateur). nommé quelqu'un. lors de l'exécution de QQBot, entrez qqbot -u quelqu'un et les configurations sous le projet quelqu'un seront chargées.
Ce qui suit décrit les fonctions de chaque configuration dans le fichier de configuration. Le contenu suivant suppose que la configuration sous quelqu'un a été modifiée et exécutée en mode qqbot -u Someone .
Si vous devez utiliser le mode boîte aux lettres pour afficher le code QR, vous pouvez définir les éléments mailAccount et mailAuthCode respectivement comme compte de boîte aux lettres et code d'autorisation. Après l'exécution, le gestionnaire de code QR enverra l'image du code QR à la boîte aux lettres.
Remarque : Le code d'autorisation n'est pas le mot de passe de connexion de la boîte aux lettres, mais le code d'autorisation fourni par le fournisseur de service de boîte aux lettres pour activer le service IMAP/SMTP (rappel : la boîte aux lettres POP3/SMTP ne peut pas l'activer dans). les paramètres de la boîte aux lettres du service de la version Web et obtenez le code d'autorisation. Si seul mailAccount est défini mais pas mailAuthCode, le code d'autorisation devra être saisi manuellement au démarrage du programme.
Le mode boîte aux lettres a été testé dans les boîtes aux lettres QQ, NetEase et Google.
Si vous devez utiliser le mode serveur, vous pouvez configurer les éléments httpServerIP et httpServerPort. De manière générale, ils doivent être définis sur l'adresse IP du réseau public. Une fois le mode serveur activé, vous pouvez accéder à l'image du code QR via http://{httpServerIP}:{httpServerPort}/{any}. où {any} peut être n'importe quelle chaîne non vide de chiffres ou de lettres.
Lorsque le mode boîte aux lettres et le mode serveur sont activés en même temps, la vraie image ne sera pas envoyée lors de l'envoi d'un e-mail. Seule l'adresse de l'image sera envoyée à la boîte aux lettres, et elle ne sera envoyée qu'une seule fois lorsque le code QR. expire, actualisez simplement l’e-mail. Si vous activez uniquement le mode boîte aux lettres, la vraie image sera envoyée lors de l'envoi d'un e-mail. Lorsque le code QR expire, vous devez définir l'e-mail comme lu (l'e-mail sera lu après avoir cliqué sur l'e-mail avec QQ sur votre. téléphone portable) avant qu'il ne soit envoyé.
Si l'élément cmdQrcode est défini sur True, le code QR sera affiché en mode texte dans le terme. Remarque : Pour utiliser le mode texte, vous devez installer vous-même les bibliothèques Pillow et WCwidth. Vous pouvez utiliser pip pour les installer.
Chaque utilisateur dans le fichier de configuration possède l'élément qq. Si cet élément a été défini sur un certain numéro QQ, QQBot se connectera automatiquement en utilisant les informations de connexion enregistrées lors de la dernière connexion de ce numéro QQ lors de son démarrage.
Si l'élément restartOnOffline est défini sur True dans le fichier de configuration, QQBot sera automatiquement redémarré lorsqu'il se déconnectera ou se terminera avec une erreur.
Cette option n'est valide que dans les systèmes de type UNIX. La définition de l'option démon dans la configuration sur True exécutera le programme en mode démon. À ce stade, la sortie standard et l'erreur standard sont redirigées vers le fichier démon-$qq.log (où $qq est la valeur de l'option qq dans la configuration).
Dans des circonstances normales, QQBot sera démarré immédiatement après avoir scanné le code QR pour se connecter. Il obtiendra uniquement la liste de contacts et mettra à jour la base de données de contacts si nécessaire. Si startAfterFetch dans le fichier de configuration est défini sur True, QQBot attendra que toutes les listes de contacts soient obtenues avant de démarrer . Notez que s'il y a plus de contacts, cela prendra plus de temps.
Après le démarrage de QQBot, un serveur QQBot-term sera ouvert pour surveiller les commandes d'opération envoyées par les utilisateurs via l'outil de ligne de commande qq et les commandes d'opération envoyées via l'interface API HTTP. L'adresse IP d'écoute de ce serveur est toujours 127.0.0.1. et le numéro de port d'écoute par défaut est 8188, ce numéro de port peut être modifié en modifiant la valeur de termServerPort.
Si le numéro de port du serveur QQBot-term configuré n'est pas le 8188 par défaut, alors lors de l'exécution de la commande qq, vous devez spécifier le numéro de port dans le premier paramètre, tel que :
$ qq 8100 send buddy jack hello
$ qq 8100 list group-member chatbot
De même, le numéro de port de l'interface API HTTP doit également être modifié, par exemple : http://127.0.0.1:8100/send/buddy/jack/hello.
Si vous n'avez pas besoin d'utiliser la commande qq et l'interface HTTP-API, vous pouvez définir ce numéro de port sur 0 et le serveur QQBot-term ne sera pas ouvert pour le moment.
Si vous devez vous connecter à plusieurs numéros QQ sur la même machine, vous pouvez ouvrir directement plusieurs processus qqbot dans différents terminaux pour vous connecter. Cependant, chaque processus qqbot doit définir ses propres termServerPort et httpServerPort (ou tous définis sur 0 ou une valeur vide ), sinon un conflit de numéro de port se produira.
Si l'élément de débogage est défini sur True, les informations de débogage seront imprimées pendant l'exécution.
Généralement, les plug-ins doivent être stockés dans le répertoire d'importation du système ou dans le répertoire ~/.qqbot-tmp/plugins. Vous pouvez configurer d'autres répertoires de stockage dans l'option pluginPath. De plus, dans l'option plugins, vous pouvez spécifier les plugins qui doivent être chargés au démarrage de QQBot.
Toutes les options du fichier de configuration ont des paramètres de ligne de commande correspondants, et les options saisies dans les paramètres de ligne de commande ont une priorité plus élevée que celles du fichier de configuration. Entrez qqbot -h pour afficher tous les formats de paramètres de ligne de commande.
Il existe quatre niveaux de configuration dans le programme, et leurs priorités sont les suivantes :
使用 qqbot -u somebody 启动程序时,依次加载:
根配置 -> 默认配置 -> 用户 somebody 的配置 -> 命令行参数配置
使用 qqbot 启动程序时,依次加载:
根配置 -> 默认配置 -> 命令行参数配置
Parmi eux : la configuration racine est fixe et ne peut pas être modifiée par les utilisateurs ; la configuration par défaut et la configuration utilisateur peuvent être modifiées par les utilisateurs dans le fichier v2.x.conf ; enfin, les configurations peuvent également être saisies dans les paramètres de ligne de commande ;
Lorsque qqbot est en cours d'exécution, il recherchera/créera les fichiers/répertoires suivants dans le répertoire de travail :
Le répertoire de travail par défaut est ~/.qqbot-tmp/. Vous pouvez spécifier d'autres répertoires de travail via le paramètre de ligne de commande -b|--bench lors du démarrage de qqbot, par exemple : qqbot -b bench.
Un plug-in est en fait un module python, il peut donc s'agir d'un fichier python ou d'un package python. qqbot recherchera les plug-ins dans les répertoires suivants en fonction du nom du plug-in :
méthode de connexion à chaud
Vous pouvez charger/décharger dynamiquement des plug-ins pendant l'exécution de qqbot. Il existe trois méthodes :
Les deux premières méthodes sont appelées par des processus externes du processus qqbot, et la troisième méthode est utilisée au sein du processus qqbot. N'utilisez pas les deux premières méthodes dans le processus qqbot.
Remarque : Les plug-ins chargés à l'aide de la méthode de connexion à chaud seront perdus après le redémarrage de qqbot.
mode de connexion automatique au démarrage
Vous pouvez également charger automatiquement les plug-ins au démarrage de qqbot. Spécifiez simplement le nom du plug-in qui doit être chargé dans l'option plugins de la configuration (paramètre de ligne de commande -pl|--plugins). Ces plugins seront chargés au démarrage, avant la connexion.
De plus, s'il existe un package nommé qqbotdefault dans le système (ou dans le répertoire des plug-ins), alors tous les sous-modules du package seront automatiquement chargés en tant que plug-ins au démarrage (remarque : qqbotdefault lui-même ne sera pas chargé en tant que plug-in). plug-in).
L'écriture de plug-ins implique principalement l'écriture de fonctions de rappel ou de fonctions de tâches planifiées. Voir les sections 4 à 6 pour plus de détails.
nom | auteur github | Description de la fonction | S'il faut charger par défaut |
---|---|---|---|
qqbot.plugins.sampleslots | pandolie | Exemple de fonction de rappel | Oui |
qqbot.plugins.schedrestart | pandolie | Redémarrage programmé | Oui |
qqbot.plugins.miniirc | pandolie | serveur IRC | Non |
mot de passeconnexion | pandolie | Connectez-vous avec votre nom d'utilisateur et votre mot de passe | Non |
bloc publicitaire | feisuweb | Blocage des publicités de groupe | Non |
journal de discussion | feisuweb | Enregistrement du contenu du chat | Non |
Si vous avez des plug-ins utiles à partager, envoyez-moi un e-mail.
Sous le système Linux, le client QQ ne pouvant pas être utilisé, le plug-in qqbot.plugins.miniirc peut être utilisé pour implémenter la fonction de chat IRC. Méthode de chargement : qq plug qqbot.plugins.miniirc, ou charger au démarrage : qqbot -pl qqbot.plugins.miniirc, ou ajouter qqbot.plugins.miniirc
à l'option plugins dans le fichier de configuration.
Une fois le plug-in chargé, un serveur micro IRC sera ouvert sur le port 6667. Les utilisateurs peuvent utiliser des clients IRC (tels que weechat, irssi, etc.) pour se connecter à ce serveur afin de discuter en mode ligne de commande. Ce qui suit utilise weechat comme exemple pour présenter comment l'utiliser :
启动 weechat : weechat
连接本服务器: /connect localhost
进入 群聊天 会话: /join group-name
进入 讨论组聊天 会话: /join !discuss-name
进入 好友聊天 会话: /query buddy-name
进入 聊天会话 后,直接敲入文本并回车就可以向对方发送消息了。所有接收到的 QQ 消息也会被转发给相应的 聊天会话 。
在聊天会话之间切换: ctrl+P 或 ctrl+N
显示所有 群和讨论组 的名称: /list
Ce qui précède représente presque toutes les fonctions fournies par ce micro serveur IRC, mais c'est suffisant pour discuter avec des amis/groupes/groupes de discussion QQ.
QQBOT fait référence aux projets open source suivants:
Je tiens à remercier les trois auteurs ci-dessus pour leur partage désintéressé, en particulier Scienjus pour son analyse approfondie et détaillée du protocole SmartQQ.