listen 方法

listen() 方法用于监听 wxpy 的 bot 对象实例并启动 wechat_sender 服务,为外部发送消息到微信提供支持。

wechat_sender.listen(bot, receivers=None, token=None, port=10245, status_report=False, status_receiver=None, status_interval=3600000)[源代码]

传入 bot 实例并启动 wechat_sender 服务

参数:
  • bot – (必填|Bot对象) - wxpy 的 Bot 对象实例
  • receivers – (选填|wxpy.Chat 对象|Chat 对象列表) - 消息接收者,wxpy 的 Chat 对象实例, 或 Chat 对象列表,如果为 list 第一个 Chat 为默认接收者。如果为 Chat 对象,则默认接收者也是此对象。 不填为当前 bot 对象的文件接收者
  • token – (选填|str) - 信令,防止 receiver 被非法滥用,建议加上 token 防止非法使用,如果使用 token 请在初始化 Sender() 时也使用统一 token,否则无法发送。token 建议为 32 位及以上的无规律字符串
  • port – (选填|int) - 监听端口, 监听端口默认为 10245 ,如有冲突或特殊需要请自行指定,需要和 Sender() 统一
  • status_report – (选填|bool) - 是否开启状态报告,如果开启,wechat_sender 将会定时发送状态信息到 status_receiver
  • status_receiver – (选填|Chat 对象) - 指定 status_receiver,不填将会发送状态消息给默认接收者
  • status_interval – (选填|int|datetime.timedelta) - 指定状态报告发送间隔时间,为 integer 时代表毫秒

小技巧

专门申请一个微信号负责发送应用消息及日志信息
避免使用自己的个人微信造成不便
可以把接收者指定为个人微信

指定接收者

from wxpy import *
from wechat_sender import listen

# 这里登录单独申请的微信号
bot = Bot()
# 这里查询你的个人微信, search 填入你的微信昵称
my = bot.friends().search('your name')[0]
# 传入你的私人微信作为接收者
listen(bot, receivers=my)

向你的私人微信发送消息:

from wechat_sender import Sender
Sender().send('hello')

指定多个接收者

from wxpy import *
from wechat_sender import listen

# 这里登录单独申请的微信号
bot = Bot()
# 这里查询你的个人微信, search 填入你的微信昵称
my = bot.friends().search('your name')[0]
group = bot.groups().search('group name')[0]
# 传入接收者列表
listen(bot, receivers=[my, group])

向 group 发送消息:

from wechat_sender import Sender
Sender('group name').send('hello')

注解

关于接收者:
listen() 传入 receivers 时会把第一个 receiver 当做默认接收者,所有未指定接收者的 Sender 都将把消息发给默认接收者

使用 token 以防 sender 被滥用

警告

wechat_sender 基于 http 服务提供消息发送服务,如果部署在服务器上有潜在盗用风险,所以 listen() 初始化时务必传入 token 以防止盗用

警告

注意保证 token 安全,不要被泄漏

# 同样,基于 http 的服务需要一个端口与外部通信,listen 默认端口是 10245 ,你可以改成任何空闲端口,例如 8888
listen(bot, receiver, token='your secret', port=8888)

注解

如果传入了 token 或 port 请务必保证 Sender 在初始化时也传入相同的 token 和 port

开启 wechat_sender 的状态报告

鉴于微信个人号接口的不稳定性,我们可以开启 wechat_sender 的状态报告,定时向 status_receiver 发送状态信息

listen(bot, my, token='your secret', status_report=True, status_receiver=my)

注解

不指定 status_receiver 时状态报告将发送到默认接收者
默认每隔一小时进行一次状态报告