qqbot은 Python으로 구현되고 Tencent의 SmartQQ 프로토콜을 기반으로 하는 QQ 로봇입니다. Linux, Windows 및 Mac OSX 플랫폼에서 실행할 수 있습니다.
이 프로젝트의 github 주소: https://github.com/pandolia/qqbot
qqbot을 확장하면 이 작업을 수행할 수 있습니다.
Python 2.7/3.4+에서 사용하려면 pip로 설치하세요.
pip install qqbot
또는 소스 코드를 다운로드하고 압축을 풀고 디렉토리로 이동한 후 pip install
실행하세요.
QQBot을 시작하려면 명령줄에 qqbot을 입력하세요.
시작 과정에서 QR 코드 이미지가 자동으로 팝업됩니다. 코드를 스캔하고 로그인을 승인하려면 모바일QQ 클라이언트를 사용해야 합니다. 성공적으로 시작되면 로그인 정보가 로컬 파일에 저장됩니다. 다음에 시작할 때 다음을 입력할 수 있습니다. qqbot -q qq number 먼저 로컬 파일에서 로그인 정보를 복원해 보세요(수동으로 코드를 스캔할 필요 없음). 복구만 실패합니다. 로그인에 성공했거나 로그인 정보가 만료된 경우에는 QR 코드를 수동으로 스캔해야 합니다. 일반적으로 저장된 로그인 정보는 2일 후에 만료됩니다.
참고: Linux에서 QR 코드 이미지를 자동으로 팝업하려면 시스템에 gvfs-open 또는 Shotwell 명령이 필요합니다(일반적으로 GNOME 가상 파일 시스템 gvfs가 설치된 시스템에는 이 두 명령 중 하나가 포함됩니다). Windows 10에서는 QR 코드 이미지를 자동으로 팝업하려면 png 이미지 파일에 대한 기본 열기 프로그램을 시스템에 설정해야 합니다.
시스템이 QR 코드 이미지를 자동으로 팝업할 수 없는 경우 수동으로 이미지 파일을 열고 코드를 스캔하거나 QR 코드 표시 모드를 메일함 모드, 서버 모드 또는 텍스트 모드로 설정하여 코드를 스캔할 수 있습니다. 이 문서의 섹션 7을 참조하세요.
QQBot이 시작된 후 다른 콘솔 창에서 qq 명령을 사용하여 QQBot을 작동할 수 있습니다. 현재 제공되는 명령은 다음과 같습니다.
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
list 명령은 강력한 연락처 쿼리 및 검색 기능을 제공합니다. 사용 예는 다음과 같습니다.
# 列出所有好友
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
세 번째와 네 번째 매개변수가 key=val 형식인 경우 name=xx|nick=xx|mark=xx|card=xx|qq=xx 형식이어야 합니다. key=val, press 처리 원리는 다음과 같습니다: 숫자 문자열인 경우 QQ 번호로 쿼리하고, 그렇지 않으면 이름으로 쿼리합니다.
중복된 이름이 있는 경우 중복된 이름을 가진 모든 연락처가 나열됩니다. 좋다:
qq list group 机器人测试
"Bot Test"라는 이름의 모든 그룹이 나열됩니다.
list 명령어의 세 번째와 네 번째 매개변수에 ":like:"를 추가하면 부분 일치 패턴을 기반으로 검색됩니다. 사용 예는 다음과 같습니다.
# 列出名称中含有 “李” 的好友
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
버전 v2.2.5부터 list 명령은 테이블을 사용하여 연락처 목록을 출력합니다. 출력 스타일의 예는 다음과 같습니다.
터미널에서 테이블의 표시 효과를 보장하려면 터미널의 출력 글꼴을 콘솔라로 설정하는 것이 좋으며 각 줄에 인쇄할 수 있는 최대 문자 수는 120자 이상입니다. 또한 참고: 테이블의 표시 효과를 보장하기 위해 연락처 이름, 명함 및 기타 속성이 너무 길거나 특수 문자를 포함하는 경우 이러한 속성은 터미널에 출력되기 전에 잘리거나 필터링됩니다.
update 명령은 지정된 연락처 목록을 업데이트하며 해당 매개변수 의미는 다음과 같이 list 명령과 동일합니다.
# 更新好友列表
qq update buddy
# 更新群列表
qq update group
# 更新 群“456班” 的成员列表
qq update group-member 456班
send 명령의 세 번째 매개변수는 list 명령의 세 번째 매개변수와 형식이 동일합니다. 중복된 이름이 있을 경우, 동일한 이름을 가진 모든 연락처로 메시지가 발송되니 주의하시기 바랍니다. 또한 두 번째 매개변수는 buddy/group/discuss만 가능하고 group-member/discuss-member는 될 수 없습니다. 예:
# 给 好友“jack” 发消息 “你好”
qq send buddy jack 你好
# 给 群“198班” 发消息 “大家好”
qq send group 198班 大家好
# 给 QQ 为 12345 的好友发消息
qq send buddy 12345 xxx
# 给讨论组发消息
qq send discuss MyDiscuss hello
메시지 내용에 "/cute"와 같은 이모티콘 키워드를 삽입하여 상대방에게 이모티콘을 보낼 수 있습니다. 자세한 내용은 Facemap.py를 참조하세요. 메시지 내용에 두 개의 이스케이프 문자 n 및 t를 사용할 수도 있습니다(예: send buddy jack 첫 번째 줄n 두 번째 줄).
위의 모든 명령은 웹 프런트엔드 개발자가 호출할 수 있는 해당 HTTP API 인터페이스를 제공합니다. 인터페이스의 URL 주소는 http://127.0.0.1:8188/{command}입니다. 각 매개변수에 "/"만 사용해야 합니다. qq 다음의 명령. URL에서 명령을 분리하고 바꾸십시오(예: http://127.0.0.1:8188/send/buddy/jack/hello). , 다른 예는 urltestbot.md를 참조하세요. 참고: 명령에 중국어 또는 특수 문자가 포함된 경우 URL 인코딩(utf8)을 먼저 수행해야 합니다. 예를 들어 http://127.0.0.1:8188/send/buddy/jack/nihao%20%E4%BD%를 호출합니다. A0%E5 %A5%BD%20wohao는 "nihao hello wohao"라는 메시지를 보냅니다. (팁: JavaScript에서는 인코딩을 위해 encodeURIComponent 함수를 사용할 수 있습니다).
또한 QQBot이 시작된 후 이 QQ 계정을 사용하여 다른 클라이언트(예: 모바일 QQ)의 그룹/토론 그룹에 "--version" 메시지를 보내면 QQBot이 자동으로 그룹/토론 그룹에 응답합니다. "QQBot -v2.xx".
자신만의 QQ 로봇을 구현하는 것은 매우 간단합니다. 자신만의 메시지 응답 기능을 정의하고 플러그인으로 로드하기만 하면 됩니다. 샘플 코드:
# -*- 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 ()
참고로, 위에서 등록한 응답 함수의 함수 이름은 "onQQMessage"이어야 하며, 함수 매개변수도 위와 일치해야 합니다.
위 코드를 Sample.py로 저장합니다(utf8 인코딩 파일로 저장됩니다). ~/.qqbot-tmp/plugins/ 디렉토리( ~ 는 사용자의 홈 디렉토리, win7에서는 C:Usersxxx를 나타냄) 또는 시스템에서 가져올 수 있는 디렉토리(예: Python의 Lib/)에 배치합니다. 설치 디렉터리) 사이트-패키지 디렉터리).
그 후 이전 qqbot 프로세스를 계속 실행하고 다른 콘솔에 qq 플러그 샘플을 입력하면 이 파일의 onQQMessage 함수가 QQBot의 해당 이벤트에 등록될 수 있습니다. 이때, 다른 QQ를 사용하여 이 QQ에 "-hello" 메시지를 보내면 "Hello, I am a QQ robots"라는 메시지가 자동으로 응답됩니다. "-stop" 메시지를 보내면 QQ 로봇은 자동으로 응답합니다. 닫은.
이 플러그인과 해당 콜백 함수를 제거하려면 콘솔에 qq unplug 샘플을 입력하세요. 여러 플러그인을 동시에 로드할 수 있으며 각 플러그인의 해당 기능이 순서대로 호출됩니다(그러나 호출 순서는 로드 순서와 관련이 없습니다).
QQBot이 실행되기 시작한 후 QQ 메시지를 받을 때마다 메시지 소스, 메시지 내용 및 QQBot 개체를 등록된 메시지 응답 함수에 전달합니다. 안에:
bot : QQBot 对象,提供 List/SendTo/Stop/Restart 等接口,详见本文档第五节
contact : QContact 对象,消息的发送者,具有 ctype/qq/uin/nick/mark/card/name 等属性
member : QContact 对象,仅当本消息为 群消息或讨论组消息 时有效,代表实际发消息的成员
content : str 对象,消息内容
contact는 메시지 보낸 사람을 나타내며 해당 ctype 속성은 친구/그룹/토론 그룹 개체를 나타내는 buddy
/ group
/ discuss
일 수 있으며, 이는 이 메시지가 친구 메시지/그룹 메시지/토론 그룹 메시지임을 나타냅니다.
member는 이 메시지가 그룹 메시지이거나 토론 그룹 메시지인 경우에만 유효하며 해당 메시지를 실제로 보낸 구성원을 나타냅니다. 해당 ctype 속성은 group-member
member / discuss-member
일 수 있습니다. 이 메시지가 친구 메시지인 경우 회원은 없음과 같습니다.
연락처와 구성원은 모두 QContact 개체입니다. 다양한 유형의 QContact 개체 속성의 의미는 qcontact-attr을 참조하세요. 모든 QContact 개체는 읽기 전용 개체 입니다. 해당 속성만 읽을 수 있고 해당 속성을 설정할 수 없으며 추가 속성을 추가할 수 없습니다.
QQBot 개체의 SendTo 인터페이스를 호출하여 QContact 개체에 메시지를 보낼 수 있지만 참고하세요. 친구/그룹/토론 그룹에만 메시지를 보낼 수 있으며 그룹 구성원/토론 그룹 구성원에게는 보낼 수 없습니다 . 즉, bot.SendTo(연락처, 'xxx')만 호출할 수 있고, bot.SendTo(member, 'xxx')는 호출할 수 없습니다.
QQBot 객체는 총 9개의 공용 인터페이스 List/Update/SendTo/Plug/Unplug/Login/Stop/Restart/FreshRestart를 제공합니다. 이러한 인터페이스의 첫 글자는 모두 대문자입니다. 또한 전역 구성 정보를 저장하기 위해 공용 속성 conf가 제공됩니다.
일반적으로 이 개체의 다른 메서드/속성을 호출/액세스하지 마세요. 특히, 하위 스레드에서 이러한 인터페이스를 호출하지 마십시오 . 다음은 처음 7개의 인터페이스와 conf 속성에 대해 설명합니다.
IDE 또는 python-shell에서 위 인터페이스를 실행하거나 테스트해야 하는 경우 먼저 qqbot 프로세스를 닫고 IDE 또는 python-shell에서 다음 코드를 실행하여 로그인해야 합니다.
>>> from qqbot import _bot as bot
>>> bot.Login(['-q', '1234'])
이 문서의 섹션 3에 있는 list 명령에 해당합니다. 연락처 개체(QContact 개체) 목록을 반환하거나 없음을 반환합니다. 첫 번째 매개변수 tinfo는 연락처 목록의 코드명이고, 두 번째 매개변수는 선택사항이다(형식은 list 명령어의 세 번째 매개변수와 동일).
tinfo 매개변수는 연락처 목록을 나타내는 데 사용됩니다. 이 매개변수는 연락처 쿼리에서 매우 중요합니다. 다음 두 가지 상황을 이해하십시오 .
tinfo의 의미(사례 1): tinfo는 buddy
/ group
/ discuss
일 수 있으며 각각 친구 목록/그룹 목록/토론 그룹 목록을 나타냅니다. 예:
# 返回 好友列表:
>>> bot.List('buddy')
# 返回名为 'jack' 的好友的列表:
>>> bot.List('buddy', 'jack')
# 返回 群列表:
>>> bot.List('group')
# 返回名为 “机器人测试” 的群的列表:
>>> bot.List('group', '机器人测试')
tinfo의 의미(사례 2): tinfo는 그룹/토론 그룹의 구성원 목록을 나타내는 ctype이 group
/ discuss
와 동일한 QContact 객체일 수도 있습니다. 예를 들어, 아래의 두 번째 및 세 번째 문장은 각각 "Class 456" 그룹의 구성원 목록과 그룹에서 명함이 "jack"인 구성원 목록을 반환합니다.
>>> g = bot.List('group', "456班")[0] # g 是一个 Group 对象(群“456班”)
>>> bot.List(g) # 返回 群“456班” 的成员列表
>>> bot.List(g, 'card=jack') # 返回 群“456班” 中名片为 “jack” 的成员列表
위의 세 번째 문장에서는 bot.List(g, 카드='jack') 형식을 허용하지 않습니다.
목록 인터페이스의 내부 실행 순서: 먼저 QQBot의 연락처 데이터베이스에서 tinfo로 표시되는 연락처 목록을 검색합니다. 목록이 데이터베이스에 이미 존재하는 경우 이 목록 내에서 검색하고 "all 및 "cinfo 일치 연락처" 목록을 포함하는 목록을 반환합니다. ; 데이터베이스에 해당 목록이 없으면 QQ 서버에 데이터를 요청하여 연락처 목록을 획득한 후 연락처 목록이 데이터베이스에 저장되고 "이 목록"이 모두 포함된 목록을 검색하여 반환합니다. 신포에서 "일치하는 연락처" 목록; QQ 서버에서 데이터를 요청하는 동안 오류가 발생하면 관련 실패 정보가 인쇄되고 None이 반환됩니다.
List 인터페이스의 반환 값의 의미: tinfo에 의해 지정된 연락처 목록에서 cinfo와 일치하는 모든 연락처를 나타내기 위해 비어 있지 않은 목록을 반환합니다. 연락처 목록에 cinfo와 일치하는 연락처가 없음을 나타내기 위해 빈 목록을 반환합니다. 나타내는 항목이 없습니다. QQ 서버에서 연락처 목록 및 정보를 요청하는 데 실패했습니다. 일치하는 연락처가 있는지 모르겠습니다.
List 인터페이스를 호출한 후, 후속 코드를 실행하기 전에 위의 세 가지 상황을 기반으로 반환 값을 판단 해야 합니다 .
참고: List 인터페이스가 비어 있지 않은 목록을 반환하는 경우 목록의 요소는 str 개체가 아닌 QContact 개체입니다.
>>> g = bot.List('group')[0] # g 是一个 Group 对象
>>> print([g, type(g), g.qq, g.name, g.uin, g.mark]) # 打印 g 的各项属性
다양한 유형의 QContact 객체 속성의 의미에 대해서는 qcontact-attr을 참조하십시오.
업데이트 인터페이스의 매개변수 tinfo는 목록 인터페이스의 매개변수와 동일한 의미를 갖습니다. 이 인터페이스를 호출하면 QQ 서버에서 해당 연락처 목록을 즉시 요청하고 연락처 데이터베이스를 업데이트하며 업데이트가 성공할 때까지 차단됩니다. 가장 느린 업데이트는 친구 목록입니다. 친구가 많을 경우 5~10초 동안 차단될 수 있습니다. 회원 목록은 2,000명 규모의 대규모 그룹에서도 업데이트 시간이 1~2초에 불과합니다.
업데이트가 성공하면 True가 반환되고, 그렇지 않으면 False가 반환됩니다.
예:
# 更新 好友列表 :
>>> bot.Update('buddy')
# 更新 群列表 :
>>> bot.Update('group')
# 更新 某个群的成员列表 :
>>> gl = bot.List('group', "456班")
>>> if gl:
>>> g = gl[0]
>>> bot.Update(g)
연락처에 메시지를 보냅니다. 첫 번째 매개변수는 QContact 객체이고, 두 번째 매개변수는 메시지 내용입니다. 다시 알림: 친구/그룹/토론 그룹에만 메시지를 보낼 수 있습니다. 그룹 구성원/토론 그룹 구성원에게는 메시지를 보낼 수 없습니다 .
메시지 내용에 "/smile"과 같은 이모티콘 키워드를 삽입하여 상대방에게 이모티콘을 보낼 수 있습니다. 자세한 내용은 Facemap.py를 참조하세요.
전송이 성공하면 문자열이 반환됩니다(向xx 发消息成功
). 그렇지 않으면 오류 원인(错误:...
)이 포함된 문자열이 반환됩니다.
메시지를 보낼 때 메시지가 반복적으로 전송될 수 있습니다. 이는 QQ 서버가 코드 1202를 반환하기 때문입니다. 버전 v2.1.17에서는 이 문제를 위해 bot.SendTo 인터페이스에 resendOn1202 매개변수를 추가했습니다. 이 매개변수가 True(기본값)인 경우, 메시지를 보낼 때 QQ 서버가 코드 1202(메시지가 실패할 수 있음을 나타냄)를 반환하면, 또한 반환 코드가 0이 될 때까지 3번 계속 전송됩니다. 이 매개변수가 False이면 재전송이 시도되지 않습니다.
True로 설정하면 대부분의 경우 메시지가 전송되지만, 때때로 메시지가 반복적으로 전송된다는 단점이 있습니다. False로 설정하면 반대로 메시지가 반복적으로 전송되지 않지만 가끔 메시지가 전송되지 않는 경우가 있습니다.
간단히 말해서, 이 1202 코드의 불확실성으로 인해 완벽한 솔루션은 없습니다. 실제 상황에 따라 resendOn1202 값을 선택하십시오.
첫 번째 매개변수 contact은 bot.List에 의해 반환된 QContact 객체이거나 onQQMessage 콜백 함수에 의해 전달된 첫 번째 매개변수여야 합니다. 예:
# 向 昵称 为 jack 的好友发消息
>>> bl = bot.List('buddy', 'jack')
>>> if bl:
>>> b = bl[0]
>>> bot.SendTo(b, 'hello')
전역 구성 정보는 bot.conf에 저장됩니다. 각 구성에 대한 자세한 내용은 이 문서의 섹션 7을 참조하세요. 예를 들어 bot.conf.termServerPort는 QQBot 명령줄 서버의 포트 번호를 저장하고 bot.conf.qq는 이 로그인의 QQ 번호를 저장합니다.
참고: bot.conf에 저장된 구성 정보는 읽기 전용입니다. 이 구성 정보를 수정하지 마십시오.
위에서 언급한 onQQMessage 응답 함수 외에도 onInit/onQrcode/onStartupComplete/onInterval/onUpdate/onPlug/onUnplug/onExit 총 9개의 이벤트에 대한 콜백 함수를 등록할 수 있습니다. 콜백 함수 매개변수 형식, 의미 및 모든 이벤트의 예.
프로그램의 실행 과정과 각 콜백 함수의 호출 시점은 다음과 같습니다.
다시 한번 알려드립니다. 등록된 콜백 함수의 함수 이름과 함수 매개변수(번호 및 이름)를 변경하면 안 됩니다 .
QQBot이 그룹 메시지를 받으면 먼저 메시지 내용을 기반으로 누군가 @인지 여부를 판단합니다. 그렇다면 메시지 내용 시작 부분에 [@ME]
표시를 추가하고 이를 onQQMessage 함수에 전달합니다. 그렇지 않으면 메시지 내용의 모든 @ME
@Me
로 바꾸고 이를 onQQMessage에 전달합니다. 따라서 onQQMessage 함수에서는 콘텐츠에 @ME
포함되어 있는지 여부만 확인하면 메시지 보낸 사람이 @를 했는지 여부를 알 수 있습니다. 예를 들어:
def onQQMessage ( bot , contact , member , content ):
if '@ME' in content :
bot . SendTo ( contact , member . name + ',艾特我干嘛呢?' )
그룹에 자신의 이름 앞부분과 동일한 이름을 가진 다른 멤버가 있는 경우(예: 귀하의 이름은 ab이고 다른 멤버의 이름은 abc), 누군가 @abc하면 허위로 보고됩니다. @ME로 이 경우 오탐을 방지하려면 단체 명함을 수정해야 합니다.
이 QQ가 메시지를 보내면 QQBot도 동일한 메시지를 수신합니다. 봇 개체는 메시지가 자체적으로 전송되는지 확인하는 isMe 메서드를 제공합니다.
def onQQMessage ( bot , contact , member , content ):
if bot . isMe ( contact , member ):
print ( 'This is me' )
2.1.13부터 qqbot은 강력한 함수 데코레이터인 qqbotsched
제공하여 예약된 작업, 샘플 코드를 사용자 정의합니다.
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 , '同志们:开饭啦啦啦啦啦啦!!!' )
위의 코드가 플러그인 형태로 로드된 후, 11시 55분과 17시 55분마다 "Class 456" 그룹에 "동지들: 저녁 식사가 제공됩니다!!!"라는 메시지가 자동으로 전송됩니다.
qqbotsched 데코레이터는 연도, 월, 일, 주, day_of_week, hour, min, second, start_date, end_date, timezone 등 총 11개의 키워드 매개변수를 허용합니다. 각 매개변수는 작업의 사용자 정의된 시간 구성요소가 일치해야 하는 값을 나타냅니다. 예: hour='11,17'은 작업이 11:xx 또는 17:xx에 실행되어야 함을 의미하고, Minute='55'는 작업이 xx:55에 실행되어야 함을 의미하며, Minute='0-55/5' 작업이 xx: 00, xx:05, xx:10, ..., xx:55에 실행되어야 함을 의미합니다. 작업을 실행합니다. day_of_week='mon-fri'(또는 '0-4')는 작업이 실행되어야 함을 나타냅니다. 월요일부터 금요일까지 실행됩니다.
qqbotsched는 Python의 예약 작업 프레임워크 apscheduler를 간단히 캡슐화한 것이며 해당 매개변수는 Unix 시스템에서 crontab 형식으로 입력되어야 합니다. crontab 및 Python의 예약 작업 프레임워크 apscheduler에 대한 자세한 내용은 다음 참조 자료를 참조하세요.
각 crontab 매개변수의 형식에 대한 자세한 내용은 다음을 참조하세요.
콜백 함수를 등록하고 예약된 작업을 사용자 정의하는 것이 QQBot을 확장하는 유일한 방법입니다. 이러한 함수를 작성할 때 다음 사항에 주의하세요.
WebQQ에 로그인할 때 QR 코드 이미지를 스캔하려면 휴대폰 QQ를 사용해야 합니다. QQBot에서 QR 코드 이미지는 다음 네 가지 모드로 표시될 수 있습니다.
GUI 모드는 기본 모드이며 PC에서만 사용할 수 있습니다. 사서함 모드는 개인용 컴퓨터와 원격 서버에서 사용할 수 있습니다. 서버 모드는 일반적으로 공용 IP 주소가 있는 시스템에서만 사용됩니다. QQ 메일함을 사용하여 QR 코드를 수신하는 경우, QR 코드 사진을 보낸 후 모바일 QQ 클라이언트는 즉시 알림을 받게 됩니다. 모바일 QQ 클라이언트에서 이메일을 열고 QR 코드를 길게 눌러 스캔하세요. 텍스트 모드는 개발 과정이나 서버 배포 중에 사용하기 편리하며 개발자에게 QQ에 로그인할 수 있는 바로가기를 제공합니다.
참고: 메일함 모드/서버 모드/텍스트 모드를 켜면 GUI 모드가 꺼지고, 로그인 시 QR 코드 이미지가 자동으로 팝업되지 않습니다.
로그인할 때마다 QR 코드 관리자(QrcodeManager 개체)가 생성됩니다. QR 코드 관리자는 구성 파일 및 명령줄 매개변수를 기반으로 QR 코드 이미지의 표시 방법을 선택합니다.
구성 파일은 ~/.qqbot-tmp/v2.x.conf 입니다( ~는 사용자의 홈 디렉터리를 나타내며, win7에서는 C:Usersxxx이고 Linux에서는 /home/xxx입니다). 실행 후 자동으로 구성됩니다. QQBot을 처음 사용하는 경우 다음 내용으로 이 구성 파일을 만듭니다.
{
# 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" : {}
# },
}
구성 파일에 고유한 사용자 구성을 추가할 수 있습니다. 즉, 파일 사전에 새 항목을 추가하고 이 항목의 키는 사용자를 나타냅니다. 예를 들어 파일에 이미 있는 누군가 항목은 사용자를 나타냅니다. someone.이라는 이름을 지정하고 QQBot을 실행할 때 qqbot -u someone 을 입력하면 someone 프로젝트 아래의 구성이 로드됩니다.
다음은 구성 파일의 각 구성에 대한 기능을 설명합니다. 다음 내용은 someone 아래의 구성이 수정되어 qqbot -u someone 모드에서 실행되는 것을 가정합니다.
QR 코드를 표시하기 위해 사서함 모드를 사용해야 하는 경우 mailAccount 및 mailAuthCode 항목을 각각 사서함 계정 및 인증 코드로 설정할 수 있습니다. 실행 후 QR 코드 관리자는 QR 코드 이미지를 사서함으로 보냅니다.
참고: 인증 코드는 사서함의 로그인 비밀번호가 아니라 IMAP/SMTP 서비스를 활성화하기 위해 사서함 서비스 공급자가 제공한 인증 코드입니다(알림: POP3/NetEase 사서함은 이를 활성화할 수 없음). 웹 버전의 메일함 설정을 확인하고 인증번호를 받으세요. mailAccount만 정의하고 mailAuthCode를 정의하지 않은 경우 프로그램 시작 시 인증 코드를 수동으로 입력해야 합니다.
사서함 모드는 QQ, NetEase 및 Google 사서함에서 테스트되었습니다.
서버 모드를 사용해야 하는 경우 httpServerIP 및 httpServerPort 항목을 구성할 수 있습니다. 일반적으로 공용 네트워크 IP로 설정해야 합니다. 서버 모드를 활성화한 후 http://{httpServerIP}:{httpServerPort}/{any}를 통해 QR 코드 이미지에 접근할 수 있습니다. 여기서 {any}는 비어 있지 않은 숫자 또는 문자 문자열일 수 있습니다.
메일함 모드와 서버 모드를 동시에 켜면 이메일 전송 시 실제 사진이 전송되지 않으며, 메일함으로는 사진 주소만 전송되며, QR 코드는 한 번만 전송됩니다. 만료되면 이메일을 새로 고치세요. 메일함 모드만 켜면 이메일을 보낼 때 실제 사진이 전송됩니다. QR 코드가 만료되면 이메일을 읽음으로 설정해야 합니다. (QQ가 포함된 이메일을 클릭하면 이메일을 읽을 수 있습니다.) 휴대폰) 최신 QR 코드 사진이 전송됩니다.
cmdQrcode 항목을 True로 설정하면 용어에 QR 코드가 텍스트 모드로 표시됩니다. 참고: 텍스트 모드를 사용하려면 Pillow 및 wcwidth 라이브러리를 직접 설치해야 합니다. pip를 사용하여 설치할 수 있습니다.
구성 파일의 각 사용자는 qq 항목을 가지고 있습니다. 이 항목이 특정 QQ 번호로 설정된 경우 QQBot은 시작 시 이 QQ 번호의 마지막 로그인에 저장된 로그인 정보를 사용하여 자동으로 로그인됩니다.
구성 파일에서 restartOnOffline 항목을 True로 설정하면 QQBot이 오프라인 상태가 되거나 오류로 인해 종료될 때 자동으로 다시 시작됩니다.
이 옵션은 UNIX 계열 시스템에서만 유효합니다. 구성에서 데몬 옵션을 True로 설정하면 프로그램이 데몬 모드에서 실행됩니다. 이 시점에서 표준 출력 및 표준 오류는 daemon-$qq.log 파일로 리디렉션됩니다(여기서 $qq는 구성의 qq 옵션 값입니다).
일반적인 상황에서는 QR 코드를 스캔하여 로그인한 후 즉시 QQBot이 시작됩니다. 필요한 경우에만 연락처 목록을 가져오고 연락처 데이터베이스를 업데이트합니다. 구성 파일의 startAfterFetch가 True로 설정된 경우 QQBot은 시작하기 전에 모든 연락처 목록을 얻을 때까지 기다립니다 . 연락처가 더 많으면 시간이 더 오래 걸립니다.
QQBot이 시작된 후 QQBot 용어 서버가 열려 사용자가 qq 명령줄 도구를 통해 보낸 작업 명령과 HTTP API 인터페이스를 통해 보낸 작업 명령을 모니터링합니다. 이 서버의 수신 IP는 항상 127.0.0.1입니다. 기본 수신 포트 번호는 8188입니다. 이 포트 번호는 termServerPort 값을 수정하여 수정할 수 있습니다.
구성된 QQBot-term 서버 포트 번호가 기본 8188이 아닌 경우 qq 명령을 실행할 때 다음과 같이 첫 번째 매개변수에 포트 번호를 지정해야 합니다.
$ qq 8100 send buddy jack hello
$ qq 8100 list group-member chatbot
마찬가지로 HTTP API 인터페이스의 포트 번호도 http://127.0.0.1:8100/send/buddy/jack/hello와 같이 변경해야 합니다.
qq 명령과 HTTP-API 인터페이스를 사용할 필요가 없는 경우 이 포트 번호를 0으로 설정하면 이때 QQBot-term 서버가 열리지 않습니다.
동일한 시스템에서 여러 QQ 번호에 로그인해야 하는 경우 서로 다른 터미널에서 여러 qqbot 프로세스를 직접 열어 로그인할 수 있습니다. 그러나 각 qqbot 프로세스는 자체 termServerPort 및 httpServerPort(또는 모두 0 또는 빈 값으로 설정)를 설정해야 합니다. ) 그렇지 않으면 포트 번호 충돌이 발생합니다.
디버그 항목을 True로 설정하면 실행 중에 디버깅 정보가 출력됩니다.
일반적으로 플러그인은 시스템의 가져오기 디렉터리 또는 ~/.qqbot-tmp/plugins 디렉터리에 저장되어야 합니다. 플러그인 경로 옵션에서 다른 저장소 디렉터리를 구성할 수 있습니다. 또한 플러그인 옵션에서는 QQBot이 시작될 때 로드해야 하는 플러그인을 지정할 수 있습니다.
구성 파일의 모든 옵션에는 해당 명령줄 매개변수가 있으며, 명령줄 매개변수에 입력된 옵션은 구성 파일의 옵션보다 우선순위가 높습니다. 모든 명령줄 매개변수 형식을 보려면 qqbot -h를 입력하세요.
프로그램에는 4가지 구성 수준이 있으며 우선순위는 다음과 같습니다.
使用 qqbot -u somebody 启动程序时,依次加载:
根配置 -> 默认配置 -> 用户 somebody 的配置 -> 命令行参数配置
使用 qqbot 启动程序时,依次加载:
根配置 -> 默认配置 -> 命令行参数配置
그 중 루트 구성은 고정되어 사용자가 수정할 수 없습니다. 기본 구성과 사용자 구성은 v2.x.conf 파일에서 사용자가 수정할 수 있습니다. 마지막으로 구성은 명령줄 매개변수에 입력할 수도 있습니다.
qqbot이 실행되면 작업 디렉터리에서 다음 파일/디렉터리를 검색/생성합니다.
기본 작업 디렉터리는 ~/.qqbot-tmp/입니다. qqbot을 시작할 때 명령줄 매개변수 -b|--bench를 통해 다른 작업 디렉터리를 지정할 수 있습니다(예: qqbot -b bench).
플러그인은 실제로 Python 모듈이므로 Python 파일 또는 Python 패키지일 수 있습니다. qqbot은 플러그인 이름을 기준으로 다음 디렉터리에서 플러그인을 검색합니다.
핫플러그 방식
qqbot 실행 중에 플러그인을 동적으로 로드/언로드할 수 있습니다. 세 가지 방법이 있습니다.
처음 두 가지 방법은 qqbot 프로세스의 외부 프로세스에 의해 호출되고 세 번째 방법은 qqbot 프로세스 내에서 사용됩니다. qqbot 프로세스 내에서 처음 두 가지 방법을 사용하지 마십시오.
참고: 핫 플러그 방법을 사용하여 로드된 플러그인은 qqbot이 다시 시작된 후 손실됩니다.
자동 플러그 시작 모드
qqbot이 시작될 때 자동으로 플러그인을 로드할 수도 있습니다. 구성의 플러그인 옵션(명령줄 매개변수 -pl|--plugins)에 로드해야 하는 플러그인 이름을 지정하기만 하면 됩니다. 이러한 플러그인은 로그인하기 전 시작 시 로드됩니다.
또한 시스템(또는 플러그인 디렉토리)에 qqbotdefault 라는 패키지가 있는 경우 패키지 아래의 모든 하위 모듈은 시작 시 자동으로 플러그인으로 로드됩니다(참고: qqbotdefault 자체는 플러그인으로 로드되지 않습니다). 플러그인).
플러그인 작성에는 주로 콜백 함수 또는 예약된 작업 함수 작성이 포함됩니다. 자세한 내용은 섹션 4~6을 참조하세요.
이름 | github 작성자 | 기능 설명 | 기본적으로 로드할지 여부 |
---|---|---|---|
qqbot.plugins.sampleslots | 판돌리아 | 콜백 함수 예시 | 예 |
qqbot.plugins.schedrestart | 판돌리아 | 예약된 재시작 | 예 |
qqbot.plugins.miniirc | 판돌리아 | IRC 서버 | 아니요 |
비밀번호 로그인 | 판돌리아 | 사용자 이름-비밀번호를 사용하여 로그인 | 아니요 |
광고 차단 | 페이수웹 | 그룹 광고 차단 | 아니요 |
채팅로그 | 페이수웹 | 채팅 내용 기록 | 아니요 |
공유하고 싶은 유용한 플러그인이 있으면 이메일을 보내주세요.
Linux 시스템에서는 QQ 클라이언트를 사용할 수 없으므로 qqbot.plugins.miniirc 플러그인을 사용하여 IRC 채팅 기능을 구현할 수 있습니다. 로딩 방법: qq qqbot.plugins.miniirc를 연결하거나 시작 시 로드: qqbot -pl qqbot.plugins.miniirc, 또는 구성 파일의 플러그인 옵션에 qqbot.plugins.miniirc
추가합니다.
플러그인이 로드된 후 마이크로 IRC 서버가 포트 6667에서 열립니다. 사용자는 IRC 클라이언트(예: weechat, irssi 등)를 사용하여 이 서버에 연결하여 명령줄 모드에서 채팅을 수행할 수 있습니다. 다음은 weechat을 예로 들어 사용 방법을 소개합니다.
启动 weechat : weechat
连接本服务器: /connect localhost
进入 群聊天 会话: /join group-name
进入 讨论组聊天 会话: /join !discuss-name
进入 好友聊天 会话: /query buddy-name
进入 聊天会话 后,直接敲入文本并回车就可以向对方发送消息了。所有接收到的 QQ 消息也会被转发给相应的 聊天会话 。
在聊天会话之间切换: ctrl+P 或 ctrl+N
显示所有 群和讨论组 的名称: /list
위의 내용은 이 마이크로 IRC 서버에서 제공하는 거의 모든 기능이지만 QQ 친구/그룹/토론 그룹과 채팅하기에 충분합니다.
QQBOT는 다음과 같은 오픈 소스 프로젝트를 나타냅니다.
SmartQQ 프로토콜에 대한 심층적이고 상세한 분석에 대한 이타적인 공유, 특히 Scienjus에 대해 위의 세 저자에게 감사의 말씀을 전합니다.