ad-password-self-service/utils/feishu/dt_callback.py

345 lines
14 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# coding: utf-8
from __future__ import absolute_import, division, print_function, unicode_literals
from typing import List
import attr
from utils.feishu.dt_code import SimpleUser
from utils.feishu.dt_help import to_json_decorator
@to_json_decorator
@attr.s
class EventMessageMergeForward(object):
root_id = attr.ib(type=str, default=None)
parent_id = attr.ib(type=str, default=None)
open_chat_id = attr.ib(type=str, default=None)
msg_type = attr.ib(type=str, default=None)
open_id = attr.ib(type=str, default=None)
open_message_id = attr.ib(type=str, default=None)
is_mention = attr.ib(type=bool, default=None)
image_key = attr.ib(type=str, default=None)
image_url = attr.ib(type=str, default=None)
create_time = attr.ib(type=int, default=None)
@to_json_decorator
@attr.s
class EventMessage(object):
"""消息事件
"""
app_id = attr.ib(type=str, default=None)
tenant_key = attr.ib(type=str, default=None) # 租户 key
type = attr.ib(type=str, default=None)
# 消息事件公共
root_id = attr.ib(type=str, default=None) # 回复的祖先消息id
parent_id = attr.ib(type=str, default=None) # 回复的消息id
open_chat_id = attr.ib(type=str, default=None) # 本次消息所发生的对话,注意:私聊也有这个
chat_type = attr.ib(type=str, default=None) # 私聊private群聊group
msg_type = attr.ib(type=str, default=None) # 消息类型
open_id = attr.ib(type=str, default=None)
open_message_id = attr.ib(type=str, default=None) # 本校消息的 id
is_mention = attr.ib(type=bool, default=None)
# 文本消息、富文本消息含有的
text = attr.ib(type=str, default='') # 文本text 和 post
text_without_at_bot = attr.ib(type=str, default='') # 消息内容会过滤掉at你的机器人的内容text 和 post
# 富文本消息
image_keys = attr.ib(type=List[str], default=attr.Factory(list)) # image_key的列表post
title = attr.ib(type=str, default='') # 标题post
# 图片消息独有的
image_height = attr.ib(type=str, default='') # 图片高度image
image_width = attr.ib(type=str, default='') # 图片宽度image
image_url = attr.ib(type=str, default='') # 图片的urlimage
image_key = attr.ib(type=str, default='') # 图片的keyimage
# 合并转发消息,(日历卡片、投票消息、会话记录等不支持合并转发)
msg_list = attr.ib(type=List[EventMessageMergeForward], default=attr.Factory(list)) # 合并转发消息的每个消息体
@to_json_decorator
@attr.s
class EventApproval(object):
""""审批通过
订阅审批定义后,该定义产生的审批实例在结束时,会推送事件消息。
"""
app_id = attr.ib(type=str, default=None)
tenant_key = attr.ib(type=str, default=None)
type = attr.ib(type=str, default=None)
definition_code = attr.ib(type=str, default=None) # 审批定义Code
definition_name = attr.ib(type=str, default=None) # 审批定义名称
instance_code = attr.ib(type=str, default=None) # 审批实例Code
start_time = attr.ib(type=int, default=None) # 审批发起时间10位秒级
end_time = attr.ib(type=int, default=None) # 审批结束时间10位秒级
event = attr.ib(type=str, default=None) # 审批结果 approve:通过 reject:拒绝 cancel:取消
@to_json_decorator
@attr.s
class EventLeaveApproval(object):
""""请假审批
请假审批通过后, 开放平台推送 leave_approval 事件到请求网址。
"""
app_id = attr.ib(type=str, default=None)
tenant_key = attr.ib(type=str, default=None)
type = attr.ib(type=str, default=None)
instance_code = attr.ib(type=str, default=None) # 审批实例Code
employee_id = attr.ib(type=str, default=None) # 用户id
start_time = attr.ib(type=int, default=None) # 审批发起时间10位秒级
end_time = attr.ib(type=int, default=None) # 审批结束时间10位秒级
leave_type = attr.ib(type=str, default=None) # 请假类型
leave_unit = attr.ib(type=int, default=None) # 请假单位1半天2一天
leave_start_time = attr.ib(type=str, default=None) # 请假开始时间 "2018-12-01 12:00:00"
leave_end_time = attr.ib(type=str, default=None) # 请假结束时间
leave_interval = attr.ib(type=int, default=None) # 请假时长,单位(秒)
leave_reason = attr.ib(type=str, default=None) # 请假事由
@to_json_decorator
@attr.s
class EventWorkApproval(object):
"""加班审批
加班审批通过后推送消息,开放平台推送 work_approval 事件到请求网址。
"""
app_id = attr.ib(type=str, default=None)
tenant_key = attr.ib(type=str, default=None)
type = attr.ib(type=str, default=None)
instance_code = attr.ib(type=str, default=None) # 审批实例Code
employee_id = attr.ib(type=str, default=None) # 用户id
start_time = attr.ib(type=int, default=None) # 审批发起时间10位秒级
end_time = attr.ib(type=int, default=None) # 审批结束时间10位秒级
work_type = attr.ib(type=str, default=None) # 加班类型
work_start_time = attr.ib(type=str, default=None) # 加班开始时间 2018-12-01 12:00:00
work_end_time = attr.ib(type=str, default=None) # 加班结束时间
work_interval = attr.ib(type=int, default=None) # 加班时长,单位(秒)
work_reason = attr.ib(type=str, default=None) # 加班事由
@to_json_decorator
@attr.s
class EventShiftApproval(object):
"""换班审批
换班审批通过后推送消息,开放平台推送 shift_approval 事件到请求网址。
"""
app_id = attr.ib(type=str, default=None)
tenant_key = attr.ib(type=str, default=None)
type = attr.ib(type=str, default=None)
instance_code = attr.ib(type=str, default=None) # 审批实例Code
employee_id = attr.ib(type=str, default=None) # 用户id
start_time = attr.ib(type=int, default=None) # 审批发起时间10位秒级
end_time = attr.ib(type=int, default=None) # 审批结束时间10位秒级
shift_time = attr.ib(type=str, default=None) # 换班时间 2018-12-01 12:00:00
return_time = attr.ib(type=str, default=None) # 还班时间 2018-12-01 12:00:00
shift_reason = attr.ib(type=str, default=None) # 换班事由
@to_json_decorator
@attr.s
class EventRemedyApproval(object):
"""补卡审批
补卡审批通过后, 开放平台推送 remedy_approval 事件到请求网址。
"""
app_id = attr.ib(type=str, default=None)
tenant_key = attr.ib(type=str, default=None)
type = attr.ib(type=str, default=None)
instance_code = attr.ib(type=str, default=None) # 审批实例Code
employee_id = attr.ib(type=str, default=None) # 用户id
start_time = attr.ib(type=int, default=None) # 审批发起时间
end_time = attr.ib(type=int, default=None) # 审批结束时间
remedy_time = attr.ib(type=str, default=None) # 补卡时间 2018-12-01 12:00:00
remedy_reason = attr.ib(type=str, default=None) # 补卡原因
@to_json_decorator
@attr.s
class EventTripApprovalSchedule(object):
trip_start_time = attr.ib(type=str, default=None) # 行程开始时间,"2018-12-01 12:00:00"
trip_end_time = attr.ib(type=str, default=None) # 行程结束时间,"2018-12-01 12:00:00"
trip_interval = attr.ib(type=int, default=None) # 行程时长(秒)
departure = attr.ib(type=str, default=None) # 出发地
destination = attr.ib(type=str, default=None) # 目的地
transportation = attr.ib(type=str, default=None) # 目的地
trip_type = attr.ib(type=str, default=None) # 单程/往返
remark = attr.ib(type=str, default=None) # 备注
@to_json_decorator
@attr.s
class EventTripApproval(object):
"""出差审批
出差审批通过后推送消息,开放平台推送 trip_approval 事件到请求网址。
"""
app_id = attr.ib(type=str, default=None)
tenant_key = attr.ib(type=str, default=None)
type = attr.ib(type=str, default=None)
instance_code = attr.ib(type=str, default=None) # 审批实例Code
employee_id = attr.ib(type=str, default=None) # 用户id
start_time = attr.ib(type=int, default=None) # 审批发起时间
end_time = attr.ib(type=int, default=None) # 审批结束时间
trip_interval = attr.ib(type=int, default=None) # 行程总时长(秒)
trip_reason = attr.ib(type=str, default=None) # 出差事由
trip_peers = attr.ib(type=List[str], default=attr.Factory(list)) # 同行人
schedules = attr.ib(type=List[EventTripApprovalSchedule], default=attr.Factory(list))
@to_json_decorator
@attr.s
class EventAppOpenUser(object):
open_id = attr.ib(type=str, default=None) # 申请者的open_id
user_id = attr.ib(type=str, default=None) # 申请者的user_id
@to_json_decorator
@attr.s
class EventAppOpen(object):
"""开通应用
当企业管理员在管理员后台开通应用时,开放平台推送 app_open 事件到请求网址。
"""
app_id = attr.ib(type=str, default=None) # 应用ID
tenant_key = attr.ib(type=str, default=None) # 企业ID
type = attr.ib(type=str, default=None) # 事件类型
applicants = attr.ib(type=List[EventAppOpenUser], default=attr.Factory(list)) # 申请者的open_id
installer = attr.ib(type=EventAppOpenUser, default=None) # 申请者的user_id
@to_json_decorator
@attr.s
class EventContactUser(object):
"""通讯录变更
应用申请通讯录读权限,平台会自动给相应应用订阅通讯录变更事件。
通讯录用户相关变更事件,包括 user_add, user_update 和 user_leave 事件类型
"""
type = attr.ib(type=str, default=None) # 事件类型,包括 user_add, user_update, user_leave
app_id = attr.ib(type=str, default=None)
tenant_key = attr.ib(type=str, default=None) # 企业标识
open_id = attr.ib(type=str, default=None)
employee_id = attr.ib(type=str, default='') # 企业自建应用返回
@to_json_decorator
@attr.s
class EventContactDepartment(object):
"""通讯录变更
应用申请通讯录读权限,平台会自动给相应应用订阅通讯录变更事件。
通讯录部门相关变更事件,包括 dept_add, dept_update 和 dept_delete
"""
type = attr.ib(type=str, default=None) # 事件类型,包括 dept_add,dept_update,dept_delete
app_id = attr.ib(type=str, default=None)
tenant_key = attr.ib(type=str, default=None) # 企业标识
open_department_id = attr.ib(type=str, default=None) # 部门的Id
@to_json_decorator
@attr.s
class EventContactScope(object):
"""当企业管理员在企业管理后台变更权限范围时,开放平台通知 contact_scope_change 到请求网址
"""
type = attr.ib(type=str, default=None) # 事件类型
app_id = attr.ib(type=str, default=None)
tenant_key = attr.ib(type=str, default=None) # 企业标识
@to_json_decorator
@attr.s
class EventRemoveAddBotI18NTitle(object):
en_us = attr.ib(type=str, default=None)
zh_cn = attr.ib(type=str, default=None)
@to_json_decorator
@attr.s
class EventAppTicket(object):
"""app_ticket 事件
对于应用商店应用,开放平台会定时发送 app_ticket 事件到请求网址,应用通过该 app_ticket 获取 app_access_token。
"""
app_id = attr.ib(type=str, default=None)
app_ticket = attr.ib(type=str, default=None)
type = attr.ib(type=str, default=None)
@to_json_decorator
@attr.s
class EventRemoveAddBot(object):
"""机器人被移出群聊/机器人被邀请进入群聊
机器人被邀请进入群聊时/被从群聊中移除时,平台推送 add_bot/remove_bot 通知事件到请求网址。
"""
app_id = attr.ib(type=str, default=None)
tenant_key = attr.ib(type=str, default=None)
type = attr.ib(type=str, default=None)
chat_name = attr.ib(type=str, default=None) # 群名称
chat_owner_employee_id = attr.ib(type=str, default=None) # 群主的employee_id如果群主是机器人则没有这个字段
chat_owner_name = attr.ib(type=str, default=None) # 群主名称
chat_owner_open_id = attr.ib(type=str, default=None) # 群主的open_id
open_chat_id = attr.ib(type=str, default=None)
operator_employee_id = attr.ib(type=str, default=None) # 操作者的emplolyee_id
operator_name = attr.ib(type=str, default=None) # 操作者姓名
operator_open_id = attr.ib(type=str, default=None) # 操作者的open_id
owner_is_bot = attr.ib(type=bool, default=False) # 群主是否是机器人
chat_i18n_names = attr.ib(type=EventRemoveAddBotI18NTitle, default=None) # 群名称国际化字段
@to_json_decorator
@attr.s
class EventP2PCreateChatUser(object):
open_id = attr.ib(type=str, default=None)
user_id = attr.ib(type=str, default=None)
name = attr.ib(type=str, default=None)
@to_json_decorator
@attr.s
class EventP2PCreateChat(object):
"""会话第一次创建的事件
机器人和用户的会话第一次创建的时候会发送通知。
"""
app_id = attr.ib(type=str, default=None)
tenant_key = attr.ib(type=str, default=None)
type = attr.ib(type=str, default=None)
chat_id = attr.ib(type=str, default=None) # 机器人和用户的会话id
# 如果是机器人发起的operator里面是机器人的open_id。如果是用户发起operator里面是用户的open_id和user_id
operator = attr.ib(type=EventP2PCreateChatUser, default=None)
user = attr.ib(type=EventP2PCreateChatUser, default=None)
@to_json_decorator
@attr.s
class EventUserInAndOutChat(object):
"""用户进出群聊
"""
# ISV 应用没有 “user_id” 字段
app_id = attr.ib(type=str, default=None)
tenant_key = attr.ib(type=str, default=None)
# 用户进群 add_user_to_chat"
# 用户出群 remove_user_from_chat
# 撤销加人 revoke_add_user_from_chat
type = attr.ib(type=str, default=None)
chat_id = attr.ib(type=str, default=None)
# 用户主动退群的话operator 就是user自己
operator = attr.ib(type=SimpleUser, default=None)
users = attr.ib(type=List[SimpleUser], default=attr.Factory(list))