资讯专栏INFORMATION COLUMN

一个简单有趣的微信聊天机器人

leonardofed / 3089人阅读

摘要:微信已经成了中国人生活中基本的通讯工具除了那些自由开源人士以外,前两天发现微信机器人的项目,其实早就有了。开发微信机器人该项目基于上的,使用文档在这里。原文地址一个简单有趣的微信聊天机器人我的博客时空路由器

微信已经成了中国人生活中基本的通讯工具(除了那些自由开源人士以外),前两天发现微信机器人的项目,其实早就有了。想着自己也做一个吧,顺便加了一些小小的功能。

释放我的机器人

微信扫一扫加他,跟他尬聊吧,把他拽到群里调戏他。

具体功能下面会介绍。

工具

手机

微信登陆必须得有手机端登陆才能使用网页登陆,因为要扫一扫

Python 平台

该项目基于 Python 开发,所以至少得来个嵌入式的开发板,或者电脑,或者...云服务器 ;-),如果要保证长时间开启与话,最好使用云服务器。

开发微信机器人

该项目基于 Github 上的 wxpy,使用文档在 这里。中文版的,所以我就不介绍这个怎么使用了。简单描述一下

创建机器人
from wxpy import *
bot = Bot()
注册消息回复

机器人对好友、群聊中 at 他的人进行回复,在群聊中同时统计每个人的发言次数和第一次发言的时间,将这些信息实时存储在本地,以防程序错误导致数据丢失。

消息回复中的机器人使用 图灵机器人, 可免费申请 API,调用他。也可以使用 小 I 机器人。这两个都是深度整合在项目里的。

@bot.register([Friend, Group])
def reply_friend(msg):
    """
    消息自动回复
    """
    print(msg)
    if isinstance(msg.chat, Group):
        group = msg.chat.name
        name = msg.member.name
        if group in stat:
            if name in stat[group]["count"]:
                stat[group]["count"][name] += 1
            else:
                stat[group]["count"][name] = 1
            flag = True
            for rank in stat[group]["rank"]:
                if name == rank["name"]:
                    flag = False
                    break
            if flag:
                stat[group]["rank"].append({"name": name, "time": time.strftime("%H:%M:%S", time.localtime())})
        else:
            stat[group] = {"count": {name: 1}, "rank": [{"name": name, "time": time.strftime("%H:%M:%S", time.localtime())}, ]}
        if msg.text == "发言排行榜":
            g = bot.groups().search(group)[0]
            if not stat[g.name]:
                return
            msg_text = ""
            index = 1
            count = stat[g.name]["count"]
            for name in sorted(count, key=lambda x: count[x], reverse=True):
                # print("{}: {} {}".format(index, rank["name"], rank["time"]))
                msg_text += "{}: {} 发言了 {} 次
".format(index, name, count[name])
                index += 1
            if msg_text:
                msg_text = "发言排行榜:
" + msg_text
                g.send(msg_text)
        if msg.text == "起床排行榜":
            g = bot.groups().search(group)[0]
            if not stat[g.name]:
                return
            msg_text = ""
            index = 1
            for rank in stat[g.name]["rank"]:
                # print("{}: {} {}".format(index, rank["name"], rank["time"]))
                msg_text += "{}: {} {}
".format(index, rank["name"], rank["time"])
                index += 1
            if msg_text:
                msg_text = "起床排行榜:
" + msg_text
                g.send(msg_text)
        with open("stat.json", "w") as fh:
            fh.write(json.dumps(stat))
        if not msg.is_at:
            return
    return tuling_auto_reply(msg)
自动接受好友申请
@bot.register(msg_types=FRIENDS)
def auto_accept_friends(msg):
    """
    自动接受好友请求
    """
    # 接受好友请求
    new_friend = msg.card.accept()
    # 向新的好友发送消息
    new_friend.send("哈哈,我们现在是超级好的好朋友了呢~~")
添加计划任务

光回复怎么够,还要做一些小小的有趣的功能,我这里添加了两个统计,一个是起床时间统计,另一个是发言统计。

当天群聊的用户第一次发言作为起床时间,虽然有些不严谨,但毕竟功能是受限制的。

然后每天的 9 点发布一次起床排行榜, 20 点发布一次发言排行榜。当然其实主动发送 “起床排行榜”、“发言排行榜” 也会回复当前的排行。

起床排行榜

发言排行榜

实现
class ScheduleThread(threading.Thread):
    """
    计划任务线程
    """
    def run(self):
        global schedule_time
        global bot
        global stat
        while 1:
            time.sleep(300)
            cur_hour = time.strftime("%H", time.localtime())
            # print("cur:{}	schedule:{}".format(cur_hour, schedule_time))
            if cur_hour == schedule_time:
                continue
            elif cur_hour == "09":
                for group in bot.groups():
                    print(group.name)
                    if not stat[group.name]:
                        continue
                    msg_text = ""
                    index = 1
                    for rank in stat[group.name]["rank"]:
                        # print("{}: {} {}".format(index, rank["name"], rank["time"]))
                        msg_text += "{}: {} {}
".format(index, rank["name"], rank["time"])
                        index += 1
                    if msg_text:
                        msg_text = "排行日报
起床排行榜:
" + msg_text
                        group.send(msg_text)
            elif cur_hour == "20":
                for group in bot.groups():
                    print(group.name)
                    if not stat[group.name]:
                        continue
                    msg_text = ""
                    index = 1
                    count = stat[group.name]["count"]
                    for name in sorted(count, key=lambda x: count[x], reverse=True):
                        # print("{}: {} {}".format(index, rank["name"], rank["time"]))
                        msg_text += "{}: {} 发言了 {} 次
".format(index, name, count[name])
                        index += 1
                    if msg_text:
                        msg_text = "排行日报
发言排行榜:
" + msg_text
                        group.send(msg_text)
            elif cur_hour == "00":
                stat = dict()
                with open("stat.json", "w") as fh:
                    fh.write("")
            schedule_time = cur_hour
聊聊

展示两个机器人互相尬聊的情况是怎么样的。

部署

创建机器人时添加一个 console_qr 参数, True 时表示在终端显示二维码,False 表示用图片程序打开二维码。按情况来,如果在没有界面的云服务器上,那就在终端打开,如果只能连 tty ,那最好的办法就是生成一张图片,放到指定的 FTP 或者云盘目录,然后本地打开扫描,或者建个简单的 HTTP 服务器展示图片,方法很多,根据自己情况来吧。

原文地址:一个简单有趣的微信聊天机器人
我的博客:时空路由器

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38642.html

相关文章

  • python_bomb----有趣微信聊天器人

    摘要:模块是一个文件,以结尾,包含了对象定义和语句模块让你能够有逻辑地组织你的代码段。把相关的代码分配到一个模块里能让你的代码更好用,更易懂。命令执行成功,执行结果命令执行失败一秒后执行关机命令 Python 模块(Module) 是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句 模块让你能够有逻辑地组织你的 Python 代码段。 把相关的代...

    bawn 评论0 收藏0
  • 微信程序开发系列教程(二)微信订阅号+人工智能问答服务

    摘要:我的前一篇文章微信程序开发系列教程一开发环境搭建已经介绍了微信服务器的开发环境搭建。本文作为开发系列的第二篇文章,介绍如何给您的微信订阅号开发一个最简单的问答服务,非常好玩。 我的前一篇文章微信程序开发系列教程(一)开发环境搭建 已经介绍了微信服务器的开发环境搭建。本文作为开发系列的第二篇文章,介绍如何给您的微信订阅号开发一个最简单的问答服务,非常好玩。 这个系列的完整代码在我的git...

    lncwwn 评论0 收藏0
  • 30行代码实现微信自动回复器人

    摘要:行代码实现微信自动回复机器人一写在前面今天下午又学到了另一种有趣的玩法微信自动回复机器人。将返回消息返回给微信消息的发送人。以此实现将微信个人号变身为聊天机器人。 30行代码实现微信自动回复机器人 一、写在前面 今天下午又学到了itchat另一种有趣的玩法---微信自动回复机器人。 程序很简单仅仅三十行代码左右,实现了机器人自动与你的微信好友聊天,下面是我的机器人小笼包跟自己微信好友聊...

    lingdududu 评论0 收藏0
  • SegmentFault 技术周刊 Vol.30 - 学习 Python 来做一些神奇好玩的事情吧

    摘要:学习笔记七数学形态学关注的是图像中的形状,它提供了一些方法用于检测形状和改变形状。学习笔记十一尺度不变特征变换,简称是图像局部特征提取的现代方法基于区域图像块的分析。本文的目的是简明扼要地说明的编码机制,并给出一些建议。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 开始之前,我们先来看这样一个提问: pyth...

    lifesimple 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<