python-wechaty: платформа чат-ботов для всего программного обеспечения для обмена мгновенными сообщениями.

Python

Author: wj-Mcat

Code: python-wechaty

Проекты личного развития, а это не просто сделать, друзья, кому интересно, могут перейти на волнуобрати внимание на, ваша поддержка - моя самая большая мотивация, спасибо всем.

Python-wechatyРобота можно дополнить небольшим количеством кода, он очень прост в использовании, идея дизайна, основанная на ООП, может отслеживать и обрабатывать большое количество событий в WeChat, таких как: автоматический ответ на сообщения, регулярная отправка сообщений, вытягивание людей в группы и запрашивать одобрение у друзей и т. д. Кроме того, в текущей системе плагинов есть много готовых инструментов, таких как объединение людей в группы. Конечно, очень просто разработать собственный плагин, нет необходимости в очень глубоких концепциях, если вы понимаете события и ООП.

Проект python-wechaty возник из wechaty, и даже было сказано, что большая часть кода напрямую переведена с него, а затем добавлены некоторые возможности python, чтобы сделать его более питоничным. В качестве инструмента ввода мгновенных сообщений в будущем мы добавим больше элементов чат-бота, чтобы он мог стать настоящим чат-ботом.

Прежде чем представить python-wechaty, давайте кратко представим wechaty.

wechaty

Может быть, многие люди будутwechatyиwechatКонтакт, ведь это всего лишь разница слов в названии. Это должно быть изwechatyСначала этот проект использовался только как библиотека инструментов WeChat, которая могла выполнять некоторые простые автоматизированные операции, такие как: регулярная отправка сообщений, отправка сообщений в группы, прием запросов на добавление в друзья и т. д.

По мере постепенного обновления проекта,wechatyПоддерживается основное программное обеспечение для обмена мгновенными сообщениями, такое как: WeChat, DingTalk и Telegram.

этопроектС 2016 года он набрал 8 тысяч звезд, это очень стабильный проект с очень большим количеством пользователей. Официальное введение к нему:

A Conversational AI RPA SDK for Chatbot

Таким образом, как инструмент входа в IM ChatBot, wechaty является компонентом инфраструктуры многих чат-ботов и постепенно будет поддерживать функции основных чат-ботов.

Рождение python-wchaty

Связь с Wechaty была в техническом салоне в конце 2019 года. Я понял, что достаточно гибкого робота можно разработать всего с 6 строками кода, что на тот момент меня сильно шокировало. Как один из наших ежедневных инструментов для общения, WeChat может значительно снизить нагрузку на утомительный процесс, если мы сможем автоматизировать некоторые процессы, такие как: привлечение людей в группы во время мероприятий, напоминание пользователям о необходимости регулярно входить и напоминание женщинам. скоро. И wechaty может хорошо поддерживать все вышеперечисленные функции, и для его завершения требуется всего несколько простых строк кода. Вернувшись, я сразу начал проверять актуальную информацию, а затем постепенно вошел в сообщество wechaty.

Очень случайно группа возможности сказала, что можно разработать гоу-вечату.В то время я думал, почему не может быть питона-вечата, и тогда я вызвался добровольцем и стал одним из соавторов питона-вечата . Поскольку я не очень хорошо знаком с программным обеспечением с открытым исходным кодом и DevOps, я столкнулся со многими проблемами на начальном этапе, но после терпеливого руководства лидеров сообщества я смог завершить разработку и управление проблемами и функциями. Из личного опыта рекомендуется, чтобы у всех была возможность участвовать в проектах с открытым исходным кодом, что может позволить вам получить много знаний.

Простейший бот

С помощью python-wechaty можно легко разработать бота, особенно после использования подключаемой системы, как показано ниже:

В приведенном выше коде реализованы две основные функции:

  • Когда бот получает#dingсигнал, ответь немедленноdongсообщение, это основноеding-dong-bot.
  • При получении текстового предложения для запроса погоды возвращается соответствующий результат запроса погоды, например: Как сегодня погода?

Вышеупомянутые два плагина встроены в систему, и в будущем будут добавлены другие готовые к использованию плагины.Конечно, пользователи также могут очень просто создавать свои собственные плагины.

Как разработать систему плагинов

Прежде чем научиться разрабатывать систему подключаемых модулей, переместитеPlug-in`, система плагинов поддерживает установку, удаление, пользовательскую настройку плагинов и т. д. Что касается конкретной формы реализации, я считаю, что она также должна сталкиваться с конкретными сценариями применения. В Wechaty, который ориентирован на события и имеет очень простую логику взаимодействия, дизайн и разработка плагинов очень просты.

Давайте посмотрим непосредственно на то, как реализован встроенный в систему плагин Dingdong.

"""basic ding-dong bot for the wechaty plugin"""
from typing import Union

from wechaty import Message, Contact, Room, FileBox
from wechaty.plugin import WechatyPlugin


class DingDongPlugin(WechatyPlugin):
    """basic ding-dong plugin"""
    @property
    def name(self):
        """name of the plugin"""
        return 'ding-dong'

    async def on_message(self, msg: Message):
        """listen message event"""
        from_contact = msg.talker()
        text = msg.text()
        room = msg.room()
        if text == '#ding':
            conversation: Union[
                Room, Contact] = from_contact if room is None else room
            await conversation.ready()
            await conversation.say('dong')

Код очень простой, но его тоже нужно вводить на нескольких уровнях.

  • WechatyPlugin
  • on_[event_name]
  • init_plugin

WechatyPlugin

Этот класс является абстрактным классом, все плагины должны наследовать от этого базового класса и переопределять его функции.

  • функция свойства имени

    Чтобы быть абстрактной функцией, она должна быть переопределена. Главным образом, чтобы определить имя плагина, как модуль уникальной аутентификации.

  • функция инициализации init_plugin

    Он может поддерживать процесс инициализации подключаемых модулей, таких как инициализация объектов таймера, объектов задержки подключения к базе данных и т. д.

  • on_[event_name]

    Такие функции в основном используются для мониторинга различных событий в системе, таких как:on_message, on_login, on_friendshipВам нужно только переписать функцию, чтобы завершить мониторинг событий. Различные плагины и разные события независимы и могут быть ориентированы на разработку в различных бизнес-сценариях.

event_name

python-wechatyОн в значительной степени управляется событиями, в конце концов, многие операции основаны напринятие сообщенияСрабатывает, мониторинг этого события является его основной функцией, может быть, первое ощущение практическоеEventEmitterЭтот режим используется для мониторинга событий, поэтому для каждого события я могу зарегистрировать разные функции для мониторинга, и каждая функция будет иметь разную логическую обработку. Это тоже традиционный метод мониторинга событий, но это как минимум принесет некоторые неудобства при разработке: параметры функции нужно искать в документации, стандартное функциональное программирование.

Я не говорю, что функциональное программирование — это плохо, просто в этом сценарии оно не сильно улучшает производительность системы, иpython-wechatyОн также не уделяет слишком много внимания производительности.

Это расширяет его до ООП, и пользователи могут наследоватьWechatyилиWechatyPluginДля мониторинга различных событий и при перезаписи функций в обычном редакторе кода параметры функций могут заполняться автоматически, тем самым уменьшая проблему просмотра параметров функций событий.

Типы событий прослушивания:error, friendship, heartbeat, login, logout, message, ready, room_invite, room_join, room_leave, room_topic, scan.

Выше было показано, как разрабатывается WechatyPlugin и на что нужно обратить внимание.Далее я дам вам подробное введение в самые основные每日一说как разрабатывают роботов.

Робот дня

Как следует из названия, благословение или напоминание отправляются через фиксированный период времени каждый день, и конкретный контент можно настроить. Вот несколько замечаний:

  • Внутри робота есть планировщик, который используется для планирования срабатывания временных событий.
  • Робот может отправлять соответствующий контент назначенным людям и группам.

Я инкапсулирую вышеуказанные функции в подключаемый модуль, а затем внедряю его вpython-wechatyв.

"""daily word plugin"""
from datetime import datetime

from apscheduler.schedulers.asyncio import AsyncIOScheduler

from wechaty import Wechaty
from wechaty.plugin import WechatyPlugin


class DailyPlugin(WechatyPlugin):
    """
    say something everyday, like `Daily Words`
    """
    @property
    def name(self) -> str:
        """get the name of the plugin"""
        return 'dayily'

    async def tick(self):
        """time tick for the plugin scheduler"""
        room_id = get_room_id()
        room = self.bot.Room.load(room_id)
        await room.ready()
        await room.say(f'i love you -> {datetime.now()}')

    async def init_plugin(self, wechaty: Wechaty):
        """init plugin"""
        await super().init_plugin(wechaty)
        scheduler = AsyncIOScheduler()
        scheduler.add_job(self.tick, 'cron', hour=6, minute=16)
        scheduler.start()

Плагин разрабатывается, а затем внедряется в Wechaty для запуска.

async def main():
    bot = Wechaty().use(DailyPlugin())
    await bot.start()
asyncio.run(main())

Не правда ли, система подключаемых модулей помогает изолировать все бизнес-сценарии, делая код очень простым в разработке и обслуживании.

python-wechaty может больше

Теперь python-wechaty только что завершил базовый инструмент ввода чат-бота, который все еще далек от настоящего чат-бота, поэтому в будущем предстоит еще много работы, и дополнительные исследования чат-бота, друзья nlp могут связаться со мной. для совместной разработки Программное обеспечение с открытым исходным кодом, которое нравится всем.

Мы общаемся по номеру:pure-_--love