tutorial,

Python-Wechaty之自动回复&关键字入群插件

吴京京 吴京京 Follow Dec 25, 2020 · 3 mins read
Python-Wechaty之自动回复&关键字入群插件

经不可靠统计,大部分聊天机器人的初学者都是以:自动回复和关键字入群这两个基础功能上手,然后才会逐步开发更多更复杂的功能,在此我将介绍如何使用python-wechaty快速实现这两个功能。

python-wechaty:一个面向所有IM平台的聊天机器人框架。

一、背景介绍

1.1 自动回复

有接触到微信公众号的同学都知道,它有一个自动回复的功能:你给它发送一个关键字,它就给你回复指定的内容,可以是纯文字,图片,视频等。

微信公众号的自动回复数量只有200个,虽然能够满足大部分的需求,可是如果扩充的话,便可以选择自定义开发。

而在微信中回复的内容又可以是什么呢?可以是:纯文字、带艾特消息@的文字、图片、动图(表情包)、视频,语音、视频、小程序以及好友名片等,这些消息内容在python-wechaty都能够使用简单的配置即可完成此功能。

1.2 关键字入群

目前有很多社区运营者都会面临着一些问题:

  • 群人数一多,就只能够一个一个拉人入群。
  • 有好几个用户/开发者群,某些群人数满了,无法动态拉到其他群。
  • 一个人管理的活动太多,每次都需要根据用户的意图将其拉到指定的群,大大增加运营同学的工作量。
  • 每天就光拉人入群就花了半天的时间,还有半天是在偷着休息,因为太累了。
  • ……

以上问题都是我根据身边部分同学和朋友的吐槽中总结而来,为了帮助他们快速完成KPI,提升业绩,我做了以下AutoReplyPlugin和RoomInviterPlugin两个插件。

接下来我将介绍如何上手这两个插件,快速解决你们身边的一些问题。

二、安装 & 配置

编程环境要求python3.7+版本,以及一个token两个依赖包。

1.1 配置Token

什么是Token?为什么要配置Token?如何获取Token?

这么粗暴的灵魂三问在我们官网上早已有相关的文档,也欢迎各位去挖掘我们潜在的文档链接,说不定你就能找到属于你的One Piece,所以在此章节我就只介绍如何在python-wechaty中配置Token。

Token的配置可以有多种方式:

  • 方法一:通过环境变量来配置

      export WECHATY_PUPPET_SERVICE_TOKEN='your-token'
    
  • 方法二:通过python代码来配置

      import os
      os.environ['WECHATY_PUPPET_SERVICE_TOKEN'] = 'your-token'
    

那如何获取长期Token呢?详细请看:Everything-about-Wechaty

1.2 安装依赖包

整个依赖包分为两个:wechaty以及wechaty-plugin-contrib,安装脚本如下所示:

# 安装python-wechaty包
pip install wechaty
# 安装插件库
pip install wechaty-plugin-contrib

前者为使用python-wechaty开发聊天机器人的基础依赖包,里面包含开发过程中的对象,甚至是自定义插件;后者为官方维护的插件库,在里面有很多常见的基础插件,让你快速解决日常学习工作中的自动化问题。同时也欢迎各位来提交PR,贡献属于自己的插件。

Wechaty社区欢迎各位优秀开发者共建Chatbot领域基础设施

三、关键字入群

关键字入群是很多社区运营同学的日常工作,也是最消耗体力的活儿,并没有很很复杂的脑力活儿。现在都0202年了,居然有同学还没有使用到自动化工具来提升工作效率,更有趣的事儿,他们大部分都有一个程序猿同事/同学/老公/老婆。为了让他们更好的帮助自己身边的人解决问题,关键字入群这个插件你们必须得安利一波儿~

3.1 功能介绍

当用户私聊你,发送一个关键字,然后聊天机器人会根据关键字寻找到对应的群,比如你给Wechaty官方机器人发送一个“wechaty”的关键字,它会将你拉到Wechaty的开发者群内,并发送欢迎语。

功能实际上很简单,如果从零开发的话,会让你无从下说。可是如果你使用python-wechaty的话,只需要几行简单的配置代码即可开发此功能。

RoomInviterPlugin Is All You Need.

3.2 示例代码

最好的代码永远是最简单的代码

以下代码接近于人类语言,即使是新手,相信看完也知道如何开发专属聊天机器人:

import asyncio
from typing import Dict
from wechaty import Wechaty
from wechaty_plugin_contrib.contrib import (
    RoomInviterOptions,
    RoomInviterPlugin
)
from wechaty_plugin_contrib.matchers import (
    MessageMatcher,
    RoomMatcher
)

async def run():
    """async run method"""
    rules: Dict[MessageMatcher, RoomMatcher] = {
        MessageMatcher('wechaty'): RoomMatcher('Wechaty开发者群(1)'),
        MessageMatcher('python-wechaty'): RoomMatcher('Python-Wechaty开发者群(2)'),
    }
    plugin = RoomInviterPlugin(options=RoomInviterOptions(
        name='python-wechaty关键字入群插件',
        rules=rules,
        welcome='欢迎入群 ~'
    ))
    bot = Wechaty().use(plugin)
    await bot.start()

asyncio.run(run())

在以上代码中,主要是分为三步:导入对象,注入规则,启动机器人。

  • 导入对象

    wechaty-plugin-contrib的插件库中,所有的插件都会存在于wechaty_plugin_contrib.contrib下。大家一方面可以从源代码中查看的到最新的插件列表,也可以从README中查看到对应的插件列表。

    相信大家能够在这里找到灵感来源,或者一怒之下提交自己的定制插件。

  • 注入规则

    在上述代码中,rules是一个规则字典,表示匹配到指定消息后就将消息发送者邀请到指定的群内;plugin就是封装核心逻辑组件,处理所有的自动化操作逻辑,开发者不需要关心这部分。

  • 启动机器人

    启动机器人只需要调用一下start这个函数。

三、自动回复

自动回复也是我们日常生活工作中的一些高频使用场景,而回复内容不仅限于文字,还可以是图片,文件,链接以及小程序等等。比如你给机器人发“网易”,它会给你发送一个网易云音乐的小程序;你给它发一个”身份证“,它会给你发送身份证的正反面照片;…… 等等。

以上应用场景很常见,而且还有更多的实际应用案例可根据自己的需求来调整。

示例代码如下所示:

import asyncio
from wechaty import Wechaty, MiniProgram  # type: ignore
from wechaty_puppet import (    # type: ignore
    FileBox
)

from wechaty_plugin_contrib import (
    AutoReplyRule,
    AutoReplyPlugin,
    AutoReplyOptions,
)

from wechaty_plugin_contrib.matchers import ContactMatcher

async def run():
    """async run method"""
    img_url = 'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy' \
              '/it/u=1257042014,3164688936&fm=26&gp=0.jpg'
    plugin = AutoReplyPlugin(options=AutoReplyOptions(
        rules=[
            AutoReplyRule(keyword='ding', reply_content='dong'),
            AutoReplyRule(keyword='七龙珠', reply_content='七龙珠'),
            AutoReplyRule(
                keyword='七龙珠',
                reply_content=FileBox.from_url(img_url, name='python.png')
            ),
            AutoReplyRule(
                keyword='网易-李白',
                reply_content=MiniProgram.create_from_json({...})
            )
        ],
        matchers=[
            ContactMatcher('秋客'),
        ]
    ))
    bot = Wechaty().use(plugin)
    await bot.start()

asyncio.run(run())

代码非常简单(API设计的很人性化),相信大家一眼就能够看懂,在此我就不做过多解释。

四、总结

python-wechaty有非常人性化的API,同时内置了很多高频功能插件库,提供给开发者能够快速上手开发出自己的小应用。

整个wechaty的目标是面向所有IM平台,打造一款通用聊天机器人框架,也欢迎各位关注并使用python-wechaty框架。

Join Newsletter
Get the latest news right in your inbox. We never spam!
Written by 吴京京 Follow
Committer of Python-Wechaty. NLP & Chatbot Researcher, a graduate student at Beijing University of Posts and Telecommunications.