qqbot — это робот QQ, реализованный на Python и основанный на протоколе Tencent SmartQQ. Он может работать на платформах 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 номер . Сначала попробуйте восстановить данные для входа из локального файла (нет необходимости вручную сканировать код). . Только восстановление не удается. Вам нужно будет вручную отсканировать QR-код для входа в систему, если вход в систему прошел успешно или срок действия данных для входа истек. Как правило, срок действия сохраненной информации для входа истекает через 2 дня.
Примечание. В Linux для автоматического отображения изображения QR-кода в системе требуется команда gvfs-open илиshotwell (как правило, системы с установленной виртуальной файловой системой GNOME gvfs содержат одну из этих двух команд). В Windows 10 в системе необходимо установить программу открытия по умолчанию для файлов изображений PNG, чтобы автоматически отображать изображение QR-кода.
Если система не может автоматически отобразить изображение 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, нажмите Принцип обработки следующий: если это строка чисел, запрос по номеру QQ, в противном случае запрос по имени.
Если есть повторяющееся имя, будут перечислены все контакты с повторяющимся именем. нравиться:
qq list group 机器人测试
Будут перечислены все группы с названием «Бот-тест».
Если к третьему и четвертому параметрам команды 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
Начиная с версии 2.2.5, команда list использует таблицу для вывода списка контактов. Пример стиля вывода следующий:
Чтобы обеспечить эффект отображения таблицы в терминале, рекомендуется установить выходной шрифт терминала на consolas и максимальное количество символов, которые можно напечатать в каждой строке, превышает 120. Также обратите внимание: чтобы обеспечить эффект отображения таблицы, если имя контакта, визитная карточка и другие атрибуты слишком длинные или содержат специальные символы, эти атрибуты будут усекаться или фильтроваться перед выводом на терминал.
Команда обновления обновляет указанный список контактов, и значения его параметров такие же, как и у команды list, например:
# 更新好友列表
qq update buddy
# 更新群列表
qq update group
# 更新 群“456班” 的成员列表
qq update group-member 456班
Третий параметр в команде отправки имеет тот же формат, что и третий параметр в команде списка. Обратите внимание, что при наличии повторяющегося имени сообщение будет отправлено всем контактам с таким же именем. Также обратите внимание, что вторым параметром может быть только приятель/группа/обсуждение, а не член группы/участник обсуждения. Пример:
# 给 好友“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. Вы также можете использовать два escape-символа n и t в содержимом сообщения (например: первая строка «отправить приятелю»n вторая строка).
Все приведенные выше команды предоставляют соответствующие интерфейсы HTTP API для вызова разработчиков веб-интерфейса. URL-адрес интерфейса: http://127.0.0.1:8188/{команда}. Для каждого параметра нужно использовать только «/». команды после 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 для отправки сообщения «--version» группе/группе обсуждений на других клиентах (например, мобильном QQ), 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/ ( ~ представляет домашний каталог пользователя, C:Usersxxx в Win7) или каталог, который можно импортировать в систему (например, Lib/ в Python каталог установки) каталог site-packages).
После этого оставьте предыдущий процесс qqbot запущенным и введите образец плагина qq в другой консоли. Затем функцию onQQMessage в этом файле можно зарегистрировать для соответствующего события QQBot. В настоящее время, если вы используете другой QQ для отправки сообщения «-hello» на этот QQ, он автоматически ответит «Привет, я робот QQ» . Если вы отправите сообщение «-stop» , робот QQ будет автоматически отправлен. закрыто.
Введите qq unplug sample на консоли, чтобы удалить этот плагин и соответствующую функцию обратного вызова. Одновременно можно загрузить несколько плагинов, и соответствующие функции в каждом плагине будут вызываться последовательно (но порядок вызова не имеет ничего общего с порядком загрузки).
После запуска 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
, который представляет объект друга/группы/группы обсуждений, указывая, что это сообщение является сообщением друга/групповым сообщением/сообщением группы обсуждения.
член действителен только в том случае, если это сообщение является групповым сообщением или сообщением дискуссионной группы и представляет участника, который фактически отправил сообщение. Его атрибут ctype может быть group-member
/ discuss-member
, который представляет объект участника группы/группы обсуждения. Если это сообщение является сообщением друга, членство равно None.
И контакт, и член являются объектами QContact. Значение атрибутов различных типов объектов QContact см. в: qcontact-attr. Обратите внимание, что все объекты QContact являются объектами только для чтения . Только его свойства можно читать, его свойства нельзя устанавливать, и к нему нельзя добавлять дополнительные свойства.
Вы можете вызвать интерфейс SendTo объекта QQBot для отправки сообщений объекту QContact, но обратите внимание: вы можете отправлять сообщения только друзьям/группам/группам обсуждений, но не членам группы/членам группы обсуждений . Другими словами, можно вызвать только bot.SendTo(contact, 'xxx'), но нельзя вызвать bot.SendTo(member, 'xxx').
Объект QQBot предоставляет в общей сложности 9 общедоступных интерфейсов List/Update/SendTo/Plug/Unplug/Login/Stop/Restart/FreshRestart. Все первые буквы этих интерфейсов пишутся с заглавной буквы. Кроме того, предоставляется общедоступный атрибут conf для сохранения информации о глобальной конфигурации.
В общем, не вызывайте и не обращайтесь к другим методам/свойствам этого объекта. В частности, не вызывайте эти интерфейсы в дочерних потоках . Ниже описаны первые семь интерфейсов и атрибуты conf.
Если вам нужно запустить или протестировать вышеуказанный интерфейс в IDE или оболочке Python, вам необходимо сначала закрыть процесс qqbot и запустить следующий код в IDE или оболочке Python для входа в систему:
>>> from qqbot import _bot as bot
>>> bot.Login(['-q', '1234'])
Соответствует команде list в разделе 3 данного документа. Возвращает список объектов контактов (объекты QContact) или None. Первый параметр 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 также может быть объектом QContact с ctype, равным group
/ discuss
, представляющим список участников группы/группы обсуждений. Например, второе и третье предложения ниже возвращают список членов группы «Класс 456» и список участников, чья визитная карточка в группе «валет» соответственно:
>>> g = bot.List('group', "456班")[0] # g 是一个 Group 对象(群“456班”)
>>> bot.List(g) # 返回 群“456班” 的成员列表
>>> bot.List(g, 'card=jack') # 返回 群“456班” 中名片为 “jack” 的成员列表
Обратите внимание, что третье предложение выше не поддерживает формат bot.List(g, card='jack').
Внутренняя последовательность выполнения интерфейса списка: сначала выполните поиск списка контактов, представленного tinfo, в базе данных контактов QQBot, если список уже существует в базе данных, выполните поиск в этом списке и верните список, содержащий список «все контакты» и «cinfo, соответствующие контактам»; ; если такого списка в базе данных нет, запросите данные с сервера QQ для получения списка контактов. После успешного получения список контактов будет сохранен в базе данных, а затем выполните поиск и верните список, содержащий все «этот список». в информации список «совпадающих контактов»; если во время запроса данных с сервера QQ возникает ошибка, соответствующая информация об ошибке будет напечатана и не будет возвращено значение «Нет».
Значение возвращаемого значения интерфейса List: Возвращает непустой список, представляющий все контакты, соответствующие cinfo, в списке контактов, указанном tinfo. Возвращает пустой список, указывающий, что в списке контактов нет контактов, соответствующих cinfo. Возвращает; Нет представления. Не удалось запросить список контактов и информацию с сервера QQ. Я не знаю, есть ли подходящие контакты.
После вызова интерфейса List обязательно оцените возвращаемое значение на основе трех вышеуказанных ситуаций, прежде чем выполнять последующий код.
Примечание. Когда интерфейс List возвращает непустой список, элементами в списке являются объекты QContact, а не объекты str:
>>> 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 секунд. Список участников обновляется очень быстро. Даже для большой группы из 2000 человек время обновления составляет всего 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 (указывающий на то, что сообщение может не получиться) при отправке сообщения. он также будет отправляться 3 раза, пока код возврата не станет 0. Если этот параметр имеет значение False, повторная отправка не будет предпринята.
Установка значения True может гарантировать, что сообщение будет отправлено в большинстве случаев, но недостатком является то, что иногда сообщение будет отправляться повторно. Если установлено значение False, наоборот, сообщение не будет отправляться повторно, но иногда сообщение не может быть отправлено.
Короче говоря, из-за неопределенности кода 1202 идеального решения не существует. Пожалуйста, выберите значение resendOn1202 в соответствии с вашей реальной ситуацией.
Первым контактом параметра должен быть объект QContact, возвращаемый bot.List, или первый параметр, переданный функцией обратного вызова 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. Формат параметров функции обратного вызова, значение и значение см. в примерах. примеры всех событий.
Запуск программы и время вызова каждой функции обратного вызова следующие:
Еще раз напоминаем: имя зарегистрированной функции обратного вызова и параметры функции (номер и имя) изменять нельзя .
Когда 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 , '同志们:开饭啦啦啦啦啦啦!!!' )
После загрузки приведенного выше кода в виде плагина в группу «Класс 456» каждые 11:55 и 17:55 будет автоматически отправляться сообщение: «Товарищи: Ужин подан!!!»
Декоратор qqbotsched принимает в общей сложности 11 ключевых параметров: год, месяц, день, неделя, день_недели, час, минута, секунда, начальная_дата, конечная_дата, часовой пояс. Каждый параметр представляет значение, которому должен соответствовать настроенный компонент времени задачи. Например: час='11,17' означает, что задача должна быть выполнена в 11:xx или 17:xx, минута='55' означает, что задача должна быть выполнена в xx:55, минута='0-55/5' означает, что задача должна быть выполнена в xx: 00, xx:05, xx:10, ..., xx:55 выполняет задачу, day_of_week='mon-fri' (или '0-4') указывает, что задача должна быть выполнена выполняться с понедельника по пятницу.
qqbotsched — это простая инкапсуляция аппланировщика платформы запланированных задач Python, и его параметры следует вводить в формате crontab в системах Unix. Информацию о crontab и планировщике запланированных задач Python см. в следующих справочных материалах:
Подробную информацию о формате каждого параметра crontab см. в разделе:
Регистрация функций обратного вызова и настройка запланированных задач — единственный способ расширить QQBot. При написании этих функций обратите внимание на следующее:
При входе в WebQQ вам необходимо использовать QQ вашего мобильного телефона для сканирования изображения QR-кода. В QQBot изображение QR-кода может отображаться в следующих четырех режимах:
Режим графического интерфейса является режимом по умолчанию и доступен только на ПК. Режим почтового ящика можно использовать на персональных компьютерах и удаленных серверах. Режим сервера обычно используется только в системах с общедоступными IP-адресами. Если вы используете почтовый ящик QQ для получения QR-кода, после отправки изображения QR-кода мобильный клиент QQ немедленно получит уведомление. Откройте электронное письмо на мобильном клиенте QQ, а затем нажмите и удерживайте QR-код для сканирования. Текстовый режим удобен для использования в процессе разработки или развертывания сервера и предоставляет разработчикам ярлык для входа в QQ.
Примечание. Когда режим почтового ящика/режим сервера/текстовый режим включен, режим графического интерфейса отключается, и изображение QR-кода не будет автоматически появляться при входе в систему.
Менеджер QR-кодов (объект QrcodeManager) будет создаваться каждый раз при входе в систему. Менеджер QR-кодов выберет метод отображения изображения QR-кода на основе файла конфигурации и параметров командной строки.
Файл конфигурации — ~/.qqbot-tmp/v2.x.conf ( ~ представляет домашний каталог пользователя, то есть C:Usersxxx в Win7 и /home/xxx в Linux. Он будет автоматически настроен после запуска). 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" : {}
# },
}
Вы можете добавить свою собственную пользовательскую конфигурацию в файл конфигурации (то есть добавить новый элемент в словарь файла, и ключ этого элемента представляет пользователя). Например, элемент «кто-то», уже находящийся в файле, представляет пользователя). названный кто-то, при запуске QQBot введите qqbot -u кто-то , и конфигурации проекта who будут загружены.
Ниже описываются функции каждой конфигурации в файле конфигурации. В следующем содержимом предполагается, что конфигурация под пользователем была изменена и запущена в режиме qqbot -u some .
Если вам нужно использовать режим почтового ящика для отображения QR-кода, вы можете установить элементы mailAccount и mailAuthCode в качестве учетной записи почтового ящика и кода авторизации соответственно. После запуска менеджер QR-кодов отправит изображение QR-кода в почтовый ящик.
Примечание. Код авторизации — это не пароль для входа в почтовый ящик, а код авторизации, предоставленный поставщиком услуг почтового ящика для активации службы IMAP/SMTP (напоминание: почтовый ящик QQ / NetEase не может активировать эту функцию). настройки почтового ящика веб-версии сервиса и получить код авторизации. Если определен только mailAccount, но не mailAuthCode, код авторизации необходимо будет ввести вручную при запуске программы.
Режим почтового ящика был протестирован в почтовых ящиках QQ, NetEase и Google.
Если вам нужно использовать режим сервера, вы можете настроить элементы httpServerIP и httpServerPort. Вообще говоря, для них должен быть установлен IP-адрес общедоступной сети. После включения режима сервера вы можете получить доступ к изображению QR-кода через http://{httpServerIP}:{httpServerPort}/{any}. где {any} может быть любой непустой строкой цифр или букв.
Когда режим почтового ящика и режим сервера включены одновременно, настоящее изображение не будет отправлено при отправке электронного письма. В почтовый ящик будет отправлен только адрес изображения, и оно будет отправлено только один раз. истекает, просто обновите письмо. Если вы включите только режим почтового ящика, при отправке электронного письма будет отправлено настоящее изображение. Когда срок действия QR-кода истечет, вам необходимо установить электронное письмо как прочитанное (электронное письмо будет прочитано после того, как вы нажмете на электронное письмо с QQ на своем устройстве). мобильный телефон) перед отправкой последних изображений QR-кода.
Если для элемента cmdQrcode установлено значение True, QR-код будет отображаться в текстовом режиме в термине. Примечание. Чтобы использовать текстовый режим, вам необходимо самостоятельно установить библиотеки Pillow и wcwidth. Для их установки можно использовать pip.
Каждый пользователь в файле конфигурации имеет элемент qq. Если для этого элемента установлен определенный номер QQ, QQBot автоматически войдет в систему, используя информацию для входа, сохраненную при последнем входе в систему с этим номером QQ, при его запуске.
Если в файле конфигурации для элемента restartOnOffline установлено значение True, QQBot будет автоматически перезапущен, когда он отключится от сети или завершится с ошибкой.
Этот параметр действителен только в UNIX-подобных системах. Если для параметра демона в конфигурации установлено значение True, программа запустится в режиме демона. На этом этапе стандартный вывод и стандартные ошибки перенаправляются в файл daemon-$qq.log (где $qq — значение параметра qq в конфигурации).
В обычных обстоятельствах QQBot запускается сразу после сканирования QR-кода для входа в систему. Он получает список контактов и обновляет базу данных контактов только при необходимости. Если для startAfterFetch в файле конфигурации установлено значение True, QQBot будет ждать получения всех списков контактов перед запуском . Обратите внимание: если контактов больше, это займет больше времени.
После запуска QQBot будет открыт сервер QQBot-term для мониторинга рабочих команд, отправленных пользователями с помощью инструмента командной строки 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. Вы можете настроить другие каталоги хранения в параметре pluginPath. Кроме того, в опции плагинов вы можете указать плагины, которые необходимо загружать при запуске QQBot.
Все параметры в файле конфигурации имеют соответствующие параметры командной строки, а параметры, введенные в параметры командной строки, имеют более высокий приоритет, чем параметры в файле конфигурации. Введите qqbot -h, чтобы просмотреть все форматы параметров командной строки.
В программе четыре уровня настройки, и их приоритеты следующие:
使用 qqbot -u somebody 启动程序时,依次加载:
根配置 -> 默认配置 -> 用户 somebody 的配置 -> 命令行参数配置
使用 qqbot 启动程序时,依次加载:
根配置 -> 默认配置 -> 命令行参数配置
Среди них: корневая конфигурация фиксирована и не может быть изменена пользователями; конфигурация по умолчанию и пользовательская конфигурация могут быть изменены пользователями в файле v2.x.conf, наконец, конфигурации также могут быть введены в параметрах командной строки;
Когда qqbot запущен, он будет искать/создавать следующие файлы/каталоги в рабочем каталоге:
Рабочий каталог по умолчанию — ~/.qqbot-tmp/. Вы можете указать другие рабочие каталоги с помощью параметра командной строки -b|--bench при запуске qqbot, например: qqbot -bbench.
Плагин на самом деле является модулем 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 не может быть использован, для реализации функции чата IRC можно использовать плагин qqbot.plugins.miniirc. Способ загрузки: qq plug qqbot.plugins.miniirc, или загрузка при запуске: qqbot -pl qqbot.plugins.miniirc, или добавьте qqbot.plugins.miniirc
в параметр плагинов в файле конфигурации.
После загрузки плагина на порту 6667 откроется микро IRC-сервер. Пользователи могут использовать 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 относится к следующим проектам с открытым исходным кодом:
Я хотел бы поблагодарить трех вышеупомянутых авторов за их самоотверженный обмен, особенно Scienjus за его глубокий и подробный анализ протокола SmartQQ.