吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3020|回复: 7
收起左侧

[Python 原创] Python钉钉关键词回复机器人

[复制链接]
无字情书 发表于 2022-9-13 10:17


钉钉机器人,随机小姐姐视频,天气查询,微信支付宝步数更新,小爱同学聊天


初学小白一枚,上班闲来无聊。在网上搜索相关的自动回复机器人,然后自己研究尝试,目前能做到关键字回复,大部分api都是网上找的,之前弄的机器人只能往群里推消息。群聊的话需要@一下机器人,私聊可以不用
参考:https://blog.csdn.net/m0_66491772/article/details/122625748

image.png image.png

[Python] 纯文本查看 复制代码
import re
import base64
import hashlib
import requests
import json
import hmac
from flask import request
from flask import Flask
import mi  # 小米运动刷步py文件

app = Flask(__name__)

'''
@app.route('/home')
def index():
    return '<h1>Hello World</h1>'
验证服务是否开启,默认为get
'''


@app.route('/home', methods=['POST'])
def get_data():
    # 第一步验证:是否是post请求
    if request.method == "POST":
        # 签名验证 获取headers中的Timestamp和Sign
        timestamp = request.headers.get('Timestamp')
        sign = request.headers.get('Sign')
        # 第二步验证:签名是否有效
        if check_sig(timestamp) == sign:
            text_info = json.loads(str(request.data, 'utf-8'))
            handle_info(text_info)
        else:
            print('签名验证失败')
    else:
        print('收到get请求')
    # get_data()必须要有返回
    return request.method


# 钉钉sign计算
def check_sig(timestamp):
    app_secret = '机器人的[color=rgba(17, 31, 44, 0.4)][font=PingFangSC-Regular, PingFangSC-Medium, &quot][size=12px]AppSecret[/size][/font][/color]'
    app_secret_enc = app_secret.encode('utf-8')
    string_to_sign = '{}\n{}'.format(timestamp, app_secret)
    string_to_sign_enc = string_to_sign.encode('utf-8')
    hmac_code = hmac.new(app_secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
    sign = base64.b64encode(hmac_code).decode('utf-8')
    return sign


# mod用于记录当前对话模式
mod = 0


def handle_info(req_data):
    # 声明mod是全局变量
    global mod
    # 解析用户发送消息 通讯webhook_url 用户名称
    text_info = req_data['text']['content'].strip()
    webhook_url = req_data['sessionWebhook']
    senderNick = req_data['senderNick'] + ' 发送:{}'.format(text_info)
    # 记录发送人与发送的消息
    print(senderNick)
    # if判断用户消息触发的关键词,然后返回对应内容
    if mod == 0:
        if len(text_info) >= 10:  # 判断消息长度
            text = '我还不理解你的意思,请参照说明回复:\n---------\n刷步\n小爱同学\n成语接龙\n看小姐姐\n地名+天气\n回复前需@我哦'
            send_md_msg(text, webhook_url)
        elif text_info[-2:] == '天气':  # 判断倒数两个字
            if len(text_info) <= 2:  # 长度小于2未提供地区,默认地区北京,API默认地区
                text = weather(text_info[:-2]) + '\n---------\n你没有指定地名哦默认显示北京,发送格式:地名+天气'
                send_md_msg(text, webhook_url)
            else:
                text = weather(text_info[:-2])
                send_md_msg(text, webhook_url)
        elif text_info[-3:] == '小姐姐':
            text = mm()
            send_md_msg(text, webhook_url)
        elif text_info[-4:] == '小爱同学':
            mod = 1  # 设置模式,以便于后续消息直接到指定模式下
            text = ai(text_info)
            send_md_msg(text, webhook_url)
        elif text_info[-4:] == '成语接龙':
            # mod = 1
            text = '还在研究哦,请先使用其他功能'
            send_md_msg(text, webhook_url)
        elif text_info[-2:] == '刷步':
            mod = 3
            text = '请私聊回复小米运动账号#密码#步数。步数不填默认为随机(30000-40000)'
            send_md_msg(text, webhook_url)
        else:
            text = '我还不理解你的意思,请参照说明回复:\n---------\n刷步\n小爱同学\n成语接龙\n看小姐姐\n地名+天气\n回复前需@我哦'
            send_md_msg(text, webhook_url)
    elif mod == 1:
        if '退出' in text_info:  # 退出
            text = '小爱先退下啦,期待与你下次相遇'
            send_md_msg(text, webhook_url)
            mod = 0  # 模式恢复
        else:
            text = ai(text_info)
            send_md_msg(text, webhook_url)
    elif mod == 3:
        try:
            # 按#拆分
            account = text_info.split('#')
            if len(account) != 3:  # 长度小于3 则格式异常
                text = '输入格式有误,请重新输入\n---------\n小米运动账号#密码#步数。步数不填默认为随机(30000-40000)'
                send_md_msg(text, webhook_url)
            else:
                # 执行外部刷步函数,推送执行结果
                text = mi.update(account[0], account[1], account[2])
                send_md_msg(text, webhook_url)
                mod = 0
        except Exception as e:
            print(e)
    print('回复消息')


# 天气api
def weather(city):
    url = 'https://api.vvhan.com/api/weather?city={}'.format(city)
    response = requests.request("POST", url)
    res = response.json()
    weather_today = '城市:{0}\n日期:{1} {2}\n天气:{3} {4} {5} {6} {7}\ntip:{8}'.format(res['city'],
                                                                                 res['info']['date'],
                                                                                 res['info']['week'],
                                                                                 res['info']['type'],
                                                                                 res['info']['high'],
                                                                                 res['info']['low'],
                                                                                 res['info']['fengxiang'],
                                                                                 res['info']['fengli'],
                                                                                 res['info']['tip'])
    return weather_today


# 随机小姐姐api
def mm():
    url = "http://tucdn.wpon.cn/api-girl/index.php"
    payload = {}
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0'
    }
    response = requests.request("GET", url, headers=headers, data=payload)
    video = 'http:' + re.findall(r'"(.*?)"', response.text)[0] + '\n---------\n妹妹虽好,身体固然重要噢!'
    return video


# 小爱同学api
def ai(words):
    url = "http://api.weijieyue.cn/api/xiaoai/api.php?msg={}".format(words)
    payload = {}
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0'
    }
    response = requests.request("GET", url, headers=headers, data=payload)
    text = response.json()['text'] + '\n---------\n当前已进入持续对话模式,需退出回复【退出】'
    return text


# 钉钉消息推送
def send_md_msg(message, webhook_url):
    data = {
        "msgtype": "text",
        "text": {
            "content": message
        }
    }
    # 利用requests发送post请求
    req = requests.post(webhook_url, json=data)
    return req


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000)

免费评分

参与人数 2吾爱币 +8 热心值 +1 收起 理由
美的随想 + 1 我很赞同!
wushaominkk + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wkdxz 发表于 2022-9-13 15:33
不错,谢谢楼主分享!
放羊的狼 发表于 2022-9-13 15:44
你是我的人 发表于 2022-9-13 18:39
 楼主| 无字情书 发表于 2022-9-13 20:01

刷步的是很早论坛大佬写的py代码,帖子地址找不到了。你论坛搜能搜到不少关于提交步数的
lenpox 发表于 2022-9-13 20:13
钉钉的话还比较有用
njjwdy 发表于 2022-9-22 15:14
请问老铁,是怎么做到不需要@机器人 就能接收到群信息的哪
 楼主| 无字情书 发表于 2022-9-22 16:17
njjwdy 发表于 2022-9-22 15:14
请问老铁,是怎么做到不需要@机器人 就能接收到群信息的哪

群发必须要@,@了后端那边才能收到消息。只有私聊的时候才不用@,钉钉那边是这么定的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 03:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表