from typing import Any, Dict, List, Union, Optional
from pydantic import Field, BaseModel
[docs]
class User(BaseModel):
"""
开黑啦 User 字段
https://developer.kaiheila.cn/doc/objects
"""
id_: Optional[str] = Field(None, alias="id")
"""用户的 id"""
username: Optional[str] = None
"""用户的名称"""
nickname: Optional[str] = None
"""用户在当前服务器的昵称"""
identify_num: Optional[str] = None
"""用户名的认证数字,用户名正常为:user_name#identify_num"""
online: Optional[bool] = None
"""当前是否在线"""
bot: Optional[bool] = None
"""是否为机器人"""
os: Optional[str] = None
"""os"""
status: Optional[int] = None
"""用户的状态,`0`和`1`代表正常,`10`代表被封禁"""
avatar: Optional[str] = None
"""用户的头像的 url 地址"""
vip_avatar: Optional[str] = None
""" vip 用户的头像的 url 地址,可能为 gif 动图"""
mobile_verified: Optional[bool] = None
"""是否手机号已验证"""
roles: Optional[List[int]] = None
"""用户在当前服务器中的角色 id 组成的列表"""
joined_at: Optional[int] = None
"""加入服务器时间"""
active_time: Optional[int] = None
"""上次在线时间"""
[docs]
class Role(BaseModel):
"""角色"""
role_id: Optional[int] = None
"""角色 id"""
name: Optional[str] = None
"""角色名称"""
color: Optional[int] = None
"""颜色色值"""
position: Optional[int] = None
"""顺序位置"""
hoist: Optional[int] = None
"""是否为角色设定(与普通成员分开显示)"""
mentionable: Optional[int] = None
"""是否允许任何人@提及此角色"""
permissions: Optional[int] = None
"""权限码"""
[docs]
class PermissionOverwrite(BaseModel):
role_id: Optional[int] = None
allow: Optional[int] = None
deny: Optional[int] = None
[docs]
class PermissionUser(BaseModel):
user: Optional[User] = None
allow: Optional[int] = None
deny: Optional[int] = None
[docs]
class ChannelRoleInfo(BaseModel):
"""频道角色权限详情"""
permission_overwrites: Optional[List[PermissionOverwrite]] = None
"""针对角色在该频道的权限覆写规则组成的列表"""
permission_users: Optional[List[PermissionUser]] = None
"""针对用户在该频道的权限覆写规则组成的列表"""
permission_sync: Optional[int] = None
"""权限设置是否与分组同步, 1 or 0"""
[docs]
class Channel(ChannelRoleInfo):
"""开黑啦 频道 字段"""
id_: Optional[str] = Field(None, alias="id")
"""频道 id"""
name: Optional[str] = None
"""频道名称"""
user_id: Optional[str] = None
"""创建者 id"""
master_id: Optional[str] = None
"""master id """
guild_id: Optional[str] = None
"""服务器 id"""
topic: Optional[str] = None
"""频道简介"""
is_category: Optional[bool] = None
"""是否为分组,事件中为 int 格式"""
parent_id: Optional[str] = None
"""上级分组的 id"""
level: Optional[int] = None
"""排序 level"""
slow_mode: Optional[int] = None
"""慢速模式下限制发言的最短时间间隔, 单位为秒(s)"""
type: Optional[int] = None
"""频道类型: 1 文字频道, 2 语音频道"""
has_password: Optional[bool] = None
"""是否有密码"""
limit_amount: Optional[int] = None
"""人数限制"""
[docs]
class Guild(BaseModel):
"""服务器"""
id_: Optional[str] = Field(None, alias="id")
"""服务器 id"""
name: Optional[str] = None
"""服务器名称"""
topic: Optional[str] = None
"""服务器主题"""
user_id: Optional[str] = None
"""服务器主的 id"""
icon: Optional[str] = None
"""服务器 icon 的地址"""
notify_type: Optional[int] = None
"""通知类型\n
`0`代表默认使用服务器通知设置\n
`1`代表接收所有通知\n
`2`代表仅@被提及\n
`3`代表不接收通知
"""
region: Optional[str] = None
"""服务器默认使用语音区域"""
enable_open: Optional[bool] = None
"""是否为公开服务器"""
open_id: Optional[str] = None
"""公开服务器 id"""
default_channel_id: Optional[str] = None
"""默认频道 id"""
welcome_channel_id: Optional[str] = None
"""欢迎频道 id"""
roles: Optional[List[Role]] = None
"""角色列表"""
channels: Optional[List[Channel]] = None
"""频道列表"""
[docs]
class Quote(BaseModel):
"""引用消息"""
id_: Optional[str] = Field(None, alias="id")
"""引用消息 id"""
type: Optional[int] = None
"""引用消息类型"""
content: Optional[str] = None
"""引用消息内容"""
create_at: Optional[int] = None
"""引用消息创建时间(毫秒)"""
author: Optional[User] = None
"""作者的用户信息"""
[docs]
class Attachments(BaseModel):
"""附加的多媒体数据"""
type: Optional[str] = None
"""多媒体类型"""
url: Optional[str] = None
"""多媒体地址"""
name: Optional[str] = None
"""多媒体名"""
size: Optional[int] = None
"""大小 单位(B)"""
[docs]
class Emoji(BaseModel):
id_: Optional[str] = Field(None, alias="id")
name: Optional[str] = None
# 转义 unicdoe 为 emoji表情
# @root_validator(pre=True)
# def parse_emoji(cls, values: dict):
# values['id'] = chr(int(values['id'][2:-2]))
# values['name'] = chr(int(values['name'][2:-2]))
# return values
[docs]
class URL(BaseModel):
url: Optional[str] = None
"""资源的 url"""
[docs]
class ListReturn(BaseModel):
meta: Optional[Meta] = None
sort: Optional[Dict[str, Any]] = None
[docs]
class BlackList(BaseModel):
"""黑名单"""
user_id: Optional[str] = None
"""用户 id"""
created_time: Optional[int] = None
"""加入黑名单的时间戳(毫秒)"""
remark: Optional[str] = None
"""加入黑名单的原因"""
user: Optional[User] = None
"""用户"""
[docs]
class BlackListsReturn(ListReturn):
"""获取黑名单列表返回信息"""
blacklists: Optional[List[BlackList]] = Field(None, alias="items")
"""黑名单列表"""
[docs]
class MessageCreateReturn(BaseModel):
"""发送频道消息返回信息"""
msg_id: Optional[str] = None
"""服务端生成的消息 id"""
msg_timestamp: Optional[int] = None
"""消息发送时间(服务器时间戳)"""
nonce: Optional[str] = None
"""随机字符串"""
[docs]
class ChannelRoleReturn(BaseModel):
"""创建或更新频道角色权限返回信息"""
role_id: Optional[int] = None
user_id: Optional[str] = None
allow: Optional[int] = None
deny: Optional[int] = None
[docs]
class GuildsReturn(ListReturn):
guilds: Optional[List[Guild]] = Field(None, alias="items")
[docs]
class ChannelsReturn(ListReturn):
channels: Optional[List[Channel]] = Field(None, alias="items")
[docs]
class GuildUsersRetrun(ListReturn):
"""服务器中的用户列表"""
users: Optional[List[User]] = Field(None, alias="items")
"""用户列表"""
user_count: Optional[int] = None
"""用户数量"""
online_count: Optional[int] = None
"""在线用户数量"""
offline_count: Optional[int] = None
"""离线用户数量"""
[docs]
class Reaction(BaseModel):
emoji: Optional[Emoji] = None
count: Optional[int] = None
me: Optional[bool] = None
[docs]
class MentionInfo(BaseModel):
mention_part: Optional[List[dict]] = None
mention_role_part: Optional[List[dict]] = None
channel_part: Optional[List[dict]] = None
item_part: Optional[List[dict]] = None
[docs]
class BaseMessage(BaseModel):
id_: Optional[str] = Field(None, alias="id")
"""消息 ID"""
type: Optional[int] = None
"""消息类型"""
content: Optional[str] = None
"""消息内容"""
embeds: Optional[List[dict]] = None
"""超链接解析数据"""
attachments: Optional[Union[bool, Attachments]] = None
"""附加的多媒体数据"""
create_at: Optional[int] = None
"""创建时间"""
updated_at: Optional[int] = None
"""更新时间"""
reactions: Optional[List[Reaction]] = None
"""回应数据"""
image_name: Optional[str] = None
""""""
read_status: Optional[bool] = None
"""是否已读"""
quote: Optional[Quote] = None
"""引用数据"""
mention_info: Optional[MentionInfo] = None
"""引用特定用户或特定角色的信息"""
[docs]
class ChannelMessage(BaseMessage):
"""频道消息"""
author: Optional[User] = None
mention: Optional[List[Any]] = None
mention_all: Optional[bool] = None
mention_roles: Optional[List[Any]] = None
mention_here: Optional[bool] = None
[docs]
class DirectMessage(BaseMessage):
"""私聊消息"""
author_id: Optional[str] = None
"""作者的用户 ID"""
from_type: Optional[int] = None
"""from_type"""
msg_icon: Optional[str] = None
"""msg_icon"""
[docs]
class ChannelMessagesReturn(BaseModel):
"""获取私信聊天消息列表返回信息"""
direct_messages: Optional[List[ChannelMessage]] = Field(None, alias="items")
[docs]
class DirectMessagesReturn(BaseModel):
"""获取私信聊天消息列表返回信息"""
direct_messages: Optional[List[DirectMessage]] = Field(None, alias="items")
[docs]
class ReactionUser(User):
reaction_time: Optional[int] = None
[docs]
class TargetInfo(BaseModel):
"""私聊会话 目标用户信息"""
id_: Optional[str] = Field(None, alias="id")
"""目标用户 ID"""
username: Optional[str] = None
"""目标用户名"""
online: Optional[bool] = None
"""是否在线"""
avatar: Optional[str] = None
"""头像图片链接"""
[docs]
class UserChat(BaseModel):
"""私聊会话"""
code: Optional[str] = None
"""私信会话 Code"""
last_read_time: Optional[int] = None
"""上次阅读消息的时间 (毫秒)"""
latest_msg_time: Optional[int] = None
"""最新消息时间 (毫秒)"""
unread_count: Optional[int] = None
"""未读消息数"""
target_info: Optional[TargetInfo] = None
"""目标用户信息"""
[docs]
class UserChatsReturn(ListReturn):
"""获取私信聊天会话列表返回信息"""
user_chats: Optional[List[UserChat]] = Field(None, alias="items")
"""私聊会话列表"""
[docs]
class RolesReturn(ListReturn):
"""获取服务器角色列表返回信息"""
roles: Optional[List[Role]] = Field(None, alias="items")
"""服务器角色列表"""
[docs]
class GuilRoleReturn(BaseModel):
"""赋予或删除用户角色返回信息"""
user_id: Optional[str] = None
"""用户 id"""
guild_id: Optional[str] = None
"""服务器 id"""
roles: Optional[List[int]] = None
"""角色 id 的列表"""
[docs]
class IntimacyImg(BaseModel):
"""形象图片的总列表"""
id_: Optional[str] = Field(None, alias="id")
""" 形象图片的 id"""
url: Optional[str] = None
"""形象图片的地址"""
[docs]
class IntimacyIndexReturn(BaseModel):
"""获取用户亲密度返回信息"""
img_url: Optional[str] = None
"""机器人给用户显示的形象图片地址"""
social_info: Optional[str] = None
"""机器人显示给用户的社交信息"""
last_read: Optional[int] = None
"""用户上次查看的时间戳"""
score: Optional[int] = None
"""亲密度,0-2200"""
img_list: Optional[List[IntimacyImg]] = None
"""形象图片的总列表"""
[docs]
class GuildEmoji(BaseModel):
"""服务器表情"""
name: Optional[str] = None
"""表情的名称"""
id_: Optional[str] = Field(None, alias="id")
"""表情的 ID"""
user_info: Optional[User] = None
"""上传用户"""
[docs]
class GuildEmojisReturn(ListReturn):
"""获取服务器表情列表返回信息"""
roles: Optional[List[GuildEmoji]] = Field(None, alias="items")
"""服务器表情列表"""
[docs]
class Invite(BaseModel):
"""邀请信息"""
guild_id: Optional[str] = None
"""服务器 id"""
channel_id: Optional[str] = None
"""频道 id"""
url_code: Optional[str] = None
"""url code"""
url: Optional[str] = None
"""地址"""
user: Optional[User] = None
"""用户"""
[docs]
class InvitesReturn(ListReturn):
"""获取邀请列表返回信息"""
roles: Optional[List[Invite]] = Field(None, alias="items")
"""邀请列表"""