一、目标:
针对于微信用户,最近想做一个机器人,想要以下功能
1.群内定时发送点餐消息(已完成)
2.微信朋友圈重要信息发布
3.个人自定义智能机器人
4.群内热点提醒;朋友圈每日热点;个人热点新闻
5.天气查询功能
6.讲段子功能
注:如果想做群聊机器人有两种方式
1.完成微信用户群发(企业微信外部群):建立企业微信并建立外部群(可对没有使用企业微信的用户发消息),如果你要使用wechaty请直接看二及以后的教程
2.完成企业微信内部成员群发(企业微信内部群):可对企业内人员发消息,不用wechaty机器人,方便快捷,详见api接口
二、调研及结果:
1.ItChat、wechat-wxpy等等大部分开源包都不行(由于使用web协议,微信已经封了且很容易封号),据说17年以前申请的微信且没有换过绑定的手机号的可以使用web协议,也就是ItChat,但不稳定。
2.使用wechaty,该项目使用ipad协议,稳定可用,不会被封号,但比ItChat复杂一些;且需要申请token(国内为“句宝客”公司提供)
3.申请token免费须知:
(1)新账户可有7天使用权限
(2)每发一篇文章到各个平台(简书、知乎、掘金等等),一篇文章可使用3个月;(联系微信号juzibot)
(3)贡献一个MVP(最小项目),联系微信Juzi.Bot(微信号juzibot),可获得永久免费资格
如果你要买付费的token:200每月
详见开源奖励计划:https://wechaty.js.org/docs/contributor-program/
token详细说明:https://github.com/juzibot/Welcome/wiki/Everything-about-Wechaty#1Token-%E7%9A%84%E5%8A%9F%E8%83%BD%E5%92%8C%E7%94%B3%E8%AF%B7
三、可用的项目:https://github.com/wechaty/python-wechaty
步骤:(必须要python3.7以上版本,我用的python3.7)
1.安装wechaty
pip install wechaty
2.导入申请的token
export WECHATY_PUPPET_HOSTIE_TOKEN='your-token'3.编写代码1,最基础功能:发送ding会返回给你一张图片
引用来自https://zhuanlan.zhihu.com/p/268885550
import asyncio
from wechaty import Wechaty, Message
class MyBot(Wechaty):
async def on_message(self, msg: Message):
talker = msg.talker()
await talker.ready()
if msg.text() == "ding":
await talker.say('dong')
elif msg.text() == 'image':
file_box = FileBox.from_url(
'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/'
'u=1116676390,2305043183&fm=26&gp=0.jpg',
name='ding-dong.jpg')
await talker.say(file_box)
async def main():
bot = MyBot()
await bot.start()
asyncio.run(main())
4.编写代码2:完成定时群发功能
#encoding = utf-8
from wechaty import Wechaty
from wechaty.plugin import WechatyPlugin
from apscheduler.schedulers.asyncio import AsyncIOScheduler
import asyncio
import datetime
#from wechaty import get_room_id
class DailyPlugin(WechatyPlugin):
@property
def name(self) -> str:
return 'dayily'
async def tick(self):
rooms = await self.bot.Room.find_all()
for currRoom in rooms:
print(f'room pay load topic: {currRoom.payload.topic}, topic: {currRoom.topic}, currRoom.room_id: {currRoom.room_id}')
topic = currRoom.payload.topic
if(topic.startswith("ding") or topic.startswith("曼玲-食神券坊外卖")):
room = currRoom
await room.say(f'您好,我是食神券坊智能机器人,今天正式上线! -> {datetime.datetime.now()}')
async def init_plugin(self, wechaty: Wechaty):
await super().init_plugin(wechaty)
scheduler = AsyncIOScheduler()
scheduler.add_job(self.tick, 'cron', hour=9, minute=43, second=55)
scheduler.start()
async def main():
bot = Wechaty().use(DailyPlugin())
await bot.start()
asyncio.run(main())