feat: 完成事件的类抽象化

This commit is contained in:
叁玖领域 2025-08-16 10:10:23 +08:00
parent 35be683f53
commit bd9fe38217
141 changed files with 5295 additions and 632 deletions

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>

View File

@ -4,6 +4,11 @@
<asm skipDebug="false" skipFrames="false" skipCode="false" expandFrames="false" />
<groovy codeStyle="LEGACY" />
</component>
<component name="EntryPointsManager">
<list size="1">
<item index="0" class="java.lang.String" itemvalue="kotlinx.serialization.Serializable" />
</list>
</component>
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="FrameworkDetectionExcludesConfiguration">
<file type="web" url="file://$PROJECT_DIR$" />

View File

@ -0,0 +1,117 @@
# KtEventGenerator.py
import os
# Kotlin事件类模板
kotlin_template_common = """
package top.r3944realms.ltdmanager.napcat.events.{path}
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* {event_description}事件
* @property data 响应数据
*/
@Serializable
data class {class_name}(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
) : {super_class}Event(status0, retcode0, message0, wording0, echo0) {{
override fun subtype(): String {{
return "{original_name}"
}}
}}
"""
def path_to_class_name(api_path):
"""将API路径转换为类名"""
# 移除斜杠和前缀下划线
clean_path = api_path.lstrip('/').lstrip('_').replace('.','point_')
# 分割单词并转换为驼峰命名
parts = clean_path.split('_')
return ''.join(part.capitalize() for part in parts) + "Event"
def path_to_original_name(api_path):
"""获取原始API名称不带斜杠"""
return api_path.lstrip('/')
def generate_description(class_name):
"""生成事件描述"""
return class_name.replace("Event", "")
def generate_kotlin_class(api_path, path0, super_class, template):
"""生成完整的Kotlin类(通过自通过模板)"""
class_name = path_to_class_name(api_path)
original_name = path_to_original_name(api_path)
event_description = generate_description(class_name)
return template.format(
path=path0,
class_name=class_name,
original_name=original_name,
event_description=event_description,
super_class=super_class
)
def find_project_root(start_path=None, marker='.projectroot'):
"""向上查找直到找到标记文件"""
if start_path is None:
start_path = os.path.abspath(__file__)
current = os.path.dirname(start_path)
while True:
if marker in os.listdir(current):
return current
parent = os.path.dirname(current)
if parent == current: # 到达根目录
raise FileNotFoundError(f"Project root marker '{marker}' not found")
current = parent
def generateEventKt(path0, superclass0, apipaths, template = kotlin_template_common):
"""
生成事件类文件
:param path0: 包路径"account""message"
:param superclass0: 父类名"AbstractAccount""AbstractMessage"
:param apipaths: API路径列表
:param template: 自提供模板(不提供则使用默认)
"""
# 创建输出目录
root_path = find_project_root()
path_ = path0.replace(".", "/")
output_dir = os.path.join(
root_path,
"src/main/kotlin/top/r3944realms/ltdmanager/napcat/events",
path_,
"wip"
)
os.makedirs(output_dir, exist_ok=True)
# 为每个API路径生成Kotlin文件
for api_path in apipaths:
kotlin_code = generate_kotlin_class(api_path, path0, superclass0, template)
class_name = path_to_class_name(api_path)
filename = os.path.join(output_dir, f"{class_name}.kt")
with open(filename, "w", encoding="utf-8") as f:
f.write(kotlin_code)
print(f"Generated: {filename}")
print(f"\nSuccessfully generated {len(apipaths)} Kotlin event classes in '{output_dir}' directory")
# 确保方法可以被导入
__all__ = ['generateEventKt']

View File

@ -1,111 +0,0 @@
import os
# 原始API路径列表
api_paths = [
"/set_qq_avatar",
"/send_like",
"/mark_private_msg_as_read",
"/mark_group_msg_as_read",
"/create_collection",
"/set_friend_add_request",
"/set_self_longnick",
"/get_login_info",
"/get_recent_contact",
"/get_stranger_info",
"/get_friend_list",
"/_mark_all_as_read",
"/get_profile_like",
"/fetch_custom_face",
"/delete_friend",
"/_get_model_show",
"/_set_model_show",
"/nc_get_user_status",
"/get_status",
"/get_mini_app_ark",
"/get_unidirectional_friend_list",
"/set_diy_online_status",
"/set_friend_remark"
]
# Kotlin事件类模板
kotlin_template = """
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* {event_description}事件
* @property data 响应数据
*/
@Serializable
data class {class_name}(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {{
override fun subtype(): String {{
return "{original_name}"
}}
}}
"""
def path_to_class_name(api_path):
"""将API路径转换为类名"""
# 移除斜杠和前缀下划线
clean_path = api_path.lstrip('/').lstrip('_')
# 分割单词并转换为驼峰命名
parts = clean_path.split('_')
return ''.join(part.capitalize() for part in parts) + "Event"
def path_to_original_name(api_path):
"""获取原始API名称不带斜杠"""
return api_path.lstrip('/')
def generate_description(class_name):
"""生成事件描述"""
return class_name.replace("Event", "")
def generate_kotlin_class(api_path):
"""生成完整的Kotlin类"""
class_name = path_to_class_name(api_path)
original_name = path_to_original_name(api_path)
event_description = generate_description(class_name)
return kotlin_template.format(
class_name=class_name,
original_name=original_name,
event_description=event_description
)
def main():
# 创建输出目录
output_dir = "../../../src/main/kotlin/top/r3944realms/ltdmanager/napcat/events/account/wip"
os.makedirs(output_dir, exist_ok=True)
# 为每个API路径生成Kotlin文件
for api_path in api_paths:
kotlin_code = generate_kotlin_class(api_path)
class_name = path_to_class_name(api_path)
filename = f"{output_dir}/{class_name}.kt"
with open(filename, "w", encoding="utf-8") as f:
f.write(kotlin_code)
print(f"Generated: {filename}")
print(f"\nSuccessfully generated {len(api_paths)} Kotlin event classes in '{output_dir}' directory")
if __name__ == "__main__":
main()

View File

@ -0,0 +1,53 @@
# ktg.py
import sys
sys.path.append("..") # 添加父目录到模块搜索路径
import KtEventGenerator as kg
def main():
api_paths = [
# 账号信息管理
"/set_qq_profile", # 设置账号信息
"/set_qq_avatar", # 设置头像
"/set_self_longnick", # 设置个性签名
"/get_login_info", # 获取登录号信息
"/get_stranger_info", # 获取账号信息(陌生人)
"/get_online_clients", # 获取在线客户端列表
"/send_like", # 点赞
"/get_profile_like", # 获取点赞列表
"/create_collection", # 创建收藏
"/fetch_custom_face", # 获取收藏表情
"/get_recent_contact", # 获取最近消息列表
# 在线状态管理
"/set_online_status", # 设置在线状态10=在线60=Q我
"/set_diy_online_status", # 设置自定义在线状态
"/get_status", # 获取状态(基础)
"/nc_get_user_status", # 获取用户状态(扩展)
"/_get_model_show", # 获取在线机型
"/_set_model_show", # 设置在线机型
# 好友关系管理
"/get_friend_list", # 获取好友列表
"/get_unidirectional_friend_list", # 获取单向好友列表
"/get_friends_with_category", # 获取好友分组列表
"/set_friend_remark", # 设置好友备注
"/delete_friend", # 删除好友
"/set_friend_add_request", # 处理好友请求
"/get_doubt_friends_add_request", # 获取被过滤好友请求
"/set_doubt_friends_add_request", # 处理被过滤请求(调用即同意!)
# 私聊消息状态
"/mark_private_msg_as_read", # 设置私聊已读
# 消息状态控制
"/mark_msg_as_read", # 设置消息已读(通用)
"/mark_group_msg_as_read", # 设置群聊已读
"/_mark_all_as_read", # 设置所有消息已读
# 卡片与分享功能
"/ArkSharePeer", # 获取推荐好友/群聊卡片
"/ArkShareGroup", # 获取推荐群聊卡片
"/get_mini_app_ark", # 获取小程序卡片
]
kg.generateEventKt("account", "AbstractAccount", api_paths)
if __name__ == "__main__":
main()

28
python/events/file/ktg.py Normal file
View File

@ -0,0 +1,28 @@
# ktg.py
import sys
sys.path.append("..") # 添加父目录到模块搜索路径
import KtEventGenerator as kg
def main():
group_apis = [
"/move_group_file", # 移动群文件
"/trans_group_file", # 转存为永久文件
"/rename_group_file", # 重命名群文件
"/upload_group_file", # 上传群文件
"/create_group_file_folder", # 创建群文件文件夹
"/delete_group_file", # 删除群文件
"/delete_group_folder", # 删除群文件夹
"/get_group_file_system_info", # 获取群文件系统信息
"/get_group_root_files", # 获取群根目录文件列表
"/get_group_files_by_folder", # 获取群子目录文件列表
"/get_group_file_url", # 获取群文件链接
"/upload_private_file", # 上传私聊文件
"/get_private_file_url", # 获取私聊文件链接
"/get_file", # 获取文件信息(通用)
"/download_file", # 下载文件到缓存目录
"/clean_cache" # 清空缓存
]
kg.generateEventKt("file", "AbstractFile", group_apis)
if __name__ == "__main__":
main()

View File

@ -1,111 +0,0 @@
import os
# 原始API路径列表
api_paths = [
"/set_qq_avatar",
"/send_like",
"/mark_private_msg_as_read",
"/mark_group_msg_as_read",
"/create_collection",
"/set_friend_add_request",
"/set_self_longnick",
"/get_login_info",
"/get_recent_contact",
"/get_stranger_info",
"/get_friend_list",
"/_mark_all_as_read",
"/get_profile_like",
"/fetch_custom_face",
"/delete_friend",
"/_get_model_show",
"/_set_model_show",
"/nc_get_user_status",
"/get_status",
"/get_mini_app_ark",
"/get_unidirectional_friend_list",
"/set_diy_online_status",
"/set_friend_remark"
]
# Kotlin事件类模板
kotlin_template = """
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* {event_description}事件
* @property data 响应数据
*/
@Serializable
data class {class_name}(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
) : AbstractGroupEvent(status0, retcode0, message0, wording0, echo0) {{
override fun subtype(): String {{
return "{original_name}"
}}
}}
"""
def path_to_class_name(api_path):
"""将API路径转换为类名"""
# 移除斜杠和前缀下划线
clean_path = api_path.lstrip('/').lstrip('_')
# 分割单词并转换为驼峰命名
parts = clean_path.split('_')
return ''.join(part.capitalize() for part in parts) + "Event"
def path_to_original_name(api_path):
"""获取原始API名称不带斜杠"""
return api_path.lstrip('/')
def generate_description(class_name):
"""生成事件描述"""
return class_name.replace("Event", "")
def generate_kotlin_class(api_path):
"""生成完整的Kotlin类"""
class_name = path_to_class_name(api_path)
original_name = path_to_original_name(api_path)
event_description = generate_description(class_name)
return kotlin_template.format(
class_name=class_name,
original_name=original_name,
event_description=event_description
)
def main():
# 创建输出目录
output_dir = "../../../src/main/kotlin/top/r3944realms/ltdmanager/napcat/events/group/wip"
os.makedirs(output_dir, exist_ok=True)
# 为每个API路径生成Kotlin文件
for api_path in api_paths:
kotlin_code = generate_kotlin_class(api_path)
class_name = path_to_class_name(api_path)
filename = f"{output_dir}/{class_name}.kt"
with open(filename, "w", encoding="utf-8") as f:
f.write(kotlin_code)
print(f"Generated: {filename}")
print(f"\nSuccessfully generated {len(api_paths)} Kotlin event classes in '{output_dir}' directory")
if __name__ == "__main__":
main()

View File

@ -0,0 +1,44 @@
# ktg.py
import sys
sys.path.append("..") # 添加父目录到模块搜索路径
import KtEventGenerator as kg
def main():
group_apis = [
"/set_group_search",
"/get_group_detail_info",
"/set_group_add_option",
"/set_group_robot_add_option",
"/set_group_kick_members",
"/set_group_remark",
"/set_group_kick",
"/get_group_system_msg",
"/set_group_ban",
"/get_essence_msg_list",
"/set_group_whole_ban",
"/set_group_portrait",
"/set_group_admin",
"/set_group_card",
"/set_essence_msg",
"/set_group_name",
"/delete_essence_msg",
"/set_group_leave",
"/_send_group_notice",
"/set_group_special_title",
"/_get_group_notice",
"/set_group_add_request",
"/get_group_info",
"/get_group_list",
"/_del_group_notice",
"/get_group_member_info",
"/get_group_member_list",
"/get_group_honor_info",
"/get_group_info_ex",
"/get_group_at_all_remain",
"/get_group_shut_list",
"/get_group_ignored_notifies",
"/set_group_sign",
"/send_group_sign"
]
kg.generateEventKt("group", "AbstractGroup", group_apis)
if __name__ == "__main__":
main()

View File

@ -1,111 +0,0 @@
import os
# 原始API路径列表
api_paths = [
"/set_qq_avatar",
"/send_like",
"/mark_private_msg_as_read",
"/mark_group_msg_as_read",
"/create_collection",
"/set_friend_add_request",
"/set_self_longnick",
"/get_login_info",
"/get_recent_contact",
"/get_stranger_info",
"/get_friend_list",
"/_mark_all_as_read",
"/get_profile_like",
"/fetch_custom_face",
"/delete_friend",
"/_get_model_show",
"/_set_model_show",
"/nc_get_user_status",
"/get_status",
"/get_mini_app_ark",
"/get_unidirectional_friend_list",
"/set_diy_online_status",
"/set_friend_remark"
]
# Kotlin事件类模板
kotlin_template = """
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* {event_description}事件
* @property data 响应数据
*/
@Serializable
data class {class_name}(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {{
override fun subtype(): String {{
return "{original_name}"
}}
}}
"""
def path_to_class_name(api_path):
"""将API路径转换为类名"""
# 移除斜杠和前缀下划线
clean_path = api_path.lstrip('/').lstrip('_')
# 分割单词并转换为驼峰命名
parts = clean_path.split('_')
return ''.join(part.capitalize() for part in parts) + "Event"
def path_to_original_name(api_path):
"""获取原始API名称不带斜杠"""
return api_path.lstrip('/')
def generate_description(class_name):
"""生成事件描述"""
return class_name.replace("Event", "")
def generate_kotlin_class(api_path):
"""生成完整的Kotlin类"""
class_name = path_to_class_name(api_path)
original_name = path_to_original_name(api_path)
event_description = generate_description(class_name)
return kotlin_template.format(
class_name=class_name,
original_name=original_name,
event_description=event_description
)
def main():
# 创建输出目录
output_dir = "../../../src/main/kotlin/top/r3944realms/ltdmanager/napcat/events/account/wip"
os.makedirs(output_dir, exist_ok=True)
# 为每个API路径生成Kotlin文件
for api_path in api_paths:
kotlin_code = generate_kotlin_class(api_path)
class_name = path_to_class_name(api_path)
filename = f"{output_dir}/{class_name}.kt"
with open(filename, "w", encoding="utf-8") as f:
f.write(kotlin_code)
print(f"Generated: {filename}")
print(f"\nSuccessfully generated {len(api_paths)} Kotlin event classes in '{output_dir}' directory")
if __name__ == "__main__":
main()

View File

@ -1,111 +0,0 @@
import os
# 原始API路径列表
api_paths = [
"/set_qq_avatar",
"/send_like",
"/mark_private_msg_as_read",
"/mark_group_msg_as_read",
"/create_collection",
"/set_friend_add_request",
"/set_self_longnick",
"/get_login_info",
"/get_recent_contact",
"/get_stranger_info",
"/get_friend_list",
"/_mark_all_as_read",
"/get_profile_like",
"/fetch_custom_face",
"/delete_friend",
"/_get_model_show",
"/_set_model_show",
"/nc_get_user_status",
"/get_status",
"/get_mini_app_ark",
"/get_unidirectional_friend_list",
"/set_diy_online_status",
"/set_friend_remark"
]
# Kotlin事件类模板
kotlin_template = """
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* {event_description}事件
* @property data 响应数据
*/
@Serializable
data class {class_name}(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {{
override fun subtype(): String {{
return "{original_name}"
}}
}}
"""
def path_to_class_name(api_path):
"""将API路径转换为类名"""
# 移除斜杠和前缀下划线
clean_path = api_path.lstrip('/').lstrip('_')
# 分割单词并转换为驼峰命名
parts = clean_path.split('_')
return ''.join(part.capitalize() for part in parts) + "Event"
def path_to_original_name(api_path):
"""获取原始API名称不带斜杠"""
return api_path.lstrip('/')
def generate_description(class_name):
"""生成事件描述"""
return class_name.replace("Event", "")
def generate_kotlin_class(api_path):
"""生成完整的Kotlin类"""
class_name = path_to_class_name(api_path)
original_name = path_to_original_name(api_path)
event_description = generate_description(class_name)
return kotlin_template.format(
class_name=class_name,
original_name=original_name,
event_description=event_description
)
def main():
# 创建输出目录
output_dir = "../../../src/main/kotlin/top/r3944realms/ltdmanager/napcat/events/account/wip"
os.makedirs(output_dir, exist_ok=True)
# 为每个API路径生成Kotlin文件
for api_path in api_paths:
kotlin_code = generate_kotlin_class(api_path)
class_name = path_to_class_name(api_path)
filename = f"{output_dir}/{class_name}.kt"
with open(filename, "w", encoding="utf-8") as f:
f.write(kotlin_code)
print(f"Generated: {filename}")
print(f"\nSuccessfully generated {len(api_paths)} Kotlin event classes in '{output_dir}' directory")
if __name__ == "__main__":
main()

View File

@ -0,0 +1,14 @@
# ktg.py
import sys
sys.path.append("../..") # 添加父目录到模块搜索路径
import KtEventGenerator as kg
def main():
api_paths = [
"/send_group_msg", # 发送群消息文本、图片、表情、JSON、语音、视频、回复、音乐卡片等
"/send_group_forward_msg", # 发送群合并转发消息
"/forward_group_single_msg", # 转发单条消息到群
"/group_poke" # 发送群聊戳一戳
]
kg.generateEventKt("message.group", "AbstractGroup", api_paths)
if __name__ == "__main__":
main()

View File

@ -0,0 +1,22 @@
# ktg.py
import sys
sys.path.append("..") # 添加父目录到模块搜索路径
import KtEventGenerator as kg
def main():
api_paths = [
"/send_poke", # 发送戳一戳(通用版,可能同时适用于群和私聊)
"/delete_msg", # 撤回消息
"/get_group_msg_history", # 获取群历史消息
"/get_friend_msg_history", # 获取好友历史消息
"/get_msg", # 获取消息详情
"/get_forward_msg", # 获取合并转发消息
"/send_forward_msg", # 发送合并转发消息(通用版)
"/set_msg_emoji_like", # 贴表情(点赞表情)
"/fetch_emoji_like", # 获取贴表情详情
"/get_record", # 获取语音消息详情
"/get_image", # 获取图片消息详情
"/send_group_ai_record" # 发送群AI语音
]
kg.generateEventKt("message", "AbstractGroup", api_paths)
if __name__ == "__main__":
main()

View File

@ -1,111 +0,0 @@
import os
# 原始API路径列表
api_paths = [
"/set_qq_avatar",
"/send_like",
"/mark_private_msg_as_read",
"/mark_group_msg_as_read",
"/create_collection",
"/set_friend_add_request",
"/set_self_longnick",
"/get_login_info",
"/get_recent_contact",
"/get_stranger_info",
"/get_friend_list",
"/_mark_all_as_read",
"/get_profile_like",
"/fetch_custom_face",
"/delete_friend",
"/_get_model_show",
"/_set_model_show",
"/nc_get_user_status",
"/get_status",
"/get_mini_app_ark",
"/get_unidirectional_friend_list",
"/set_diy_online_status",
"/set_friend_remark"
]
# Kotlin事件类模板
kotlin_template = """
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* {event_description}事件
* @property data 响应数据
*/
@Serializable
data class {class_name}(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {{
override fun subtype(): String {{
return "{original_name}"
}}
}}
"""
def path_to_class_name(api_path):
"""将API路径转换为类名"""
# 移除斜杠和前缀下划线
clean_path = api_path.lstrip('/').lstrip('_')
# 分割单词并转换为驼峰命名
parts = clean_path.split('_')
return ''.join(part.capitalize() for part in parts) + "Event"
def path_to_original_name(api_path):
"""获取原始API名称不带斜杠"""
return api_path.lstrip('/')
def generate_description(class_name):
"""生成事件描述"""
return class_name.replace("Event", "")
def generate_kotlin_class(api_path):
"""生成完整的Kotlin类"""
class_name = path_to_class_name(api_path)
original_name = path_to_original_name(api_path)
event_description = generate_description(class_name)
return kotlin_template.format(
class_name=class_name,
original_name=original_name,
event_description=event_description
)
def main():
# 创建输出目录
output_dir = "../../../src/main/kotlin/top/r3944realms/ltdmanager/napcat/events/account/wip"
os.makedirs(output_dir, exist_ok=True)
# 为每个API路径生成Kotlin文件
for api_path in api_paths:
kotlin_code = generate_kotlin_class(api_path)
class_name = path_to_class_name(api_path)
filename = f"{output_dir}/{class_name}.kt"
with open(filename, "w", encoding="utf-8") as f:
f.write(kotlin_code)
print(f"Generated: {filename}")
print(f"\nSuccessfully generated {len(api_paths)} Kotlin event classes in '{output_dir}' directory")
if __name__ == "__main__":
main()

View File

@ -0,0 +1,14 @@
# ktg.py
import sys
sys.path.append("../..") # 添加父目录到模块搜索路径
import KtEventGenerator as kg
def main():
api_paths = [
"/send_private_msg", # 发送私聊消息文本、图片、表情、JSON、语音、视频、回复、音乐卡片等
"/send_private_forward_msg", # 发送私聊合并转发消息
"/forward_friend_single_msg", # 转发单条消息到私聊
"/friend_poke" # 发送私聊戳一戳
]
kg.generateEventKt("message.personal", "AbstractGroup", api_paths)
if __name__ == "__main__":
main()

View File

@ -0,0 +1,24 @@
# ktg.py
import sys
sys.path.append("..") # 添加父目录到模块搜索路径
import KtEventGenerator as kg
def main():
api_paths = [
# 保留
"/send_private_msg", # send_private_msg
"/send_group_msg", # send_group_msg
"/send_msg", # send_msg
# 接口
"/unknown", # unknown
"/get_guild_list", # get_guild_list
"/get_guild_service_profile", # get_guild_service_profile
"/check_url_safely", # 检查链接安全性
#bug
"/get_collection_list", # 获取收藏列表
"/get_group_ignore_add_request" # 获取被过滤的加群请求
]
kg.generateEventKt("other", "AbstractOther", api_paths)
if __name__ == "__main__":
main()

View File

@ -0,0 +1,17 @@
# ktg.py
import sys
sys.path.append("..") # 添加父目录到模块搜索路径
import KtEventGenerator as kg
def main():
api_paths = [
"/get_clientkey", # 获取 clientkey
"/get_cookies", # 获取 cookies
"/get_csrf_token", # 获取 CSRF Token
"/get_credentials", # 获取 QQ 相关接口凭证
"/get_rkey", # 获取 rkey通用
"/nc_get_rkey", # nc获取rkey可能是特殊渠道
"/get_rkey_server" # 获取rkey服务可能是服务端专用
]
kg.generateEventKt("passkey", "AbstractPasskey", api_paths)
if __name__ == "__main__":
main()

View File

@ -0,0 +1,20 @@
# ktg.py
import sys
sys.path.append("..") # 添加父目录到模块搜索路径
import KtEventGenerator as kg
def main():
api_paths = [
"/ocr_image", # OCR 图片识别
"/.ocr_image", # .OCR 图片识别
"/translate_en2zh", # 获取 CSRF Token
"/.handle_quick_operation", # .对事件执行快速操作
"/can_send_image", # 检查是否可以发送图片
"/can_send_record", # 检查是否可以发送语音
"/get_ai_characters", # 获取AI语音人物
"/click_inline_keyboard_button", # 点击按钮
"/get_ai_record" # 获取AI语音
"/set_input_status" # 设置输入状态
]
kg.generateEventKt("personal", "AbstractPersonal", api_paths)
if __name__ == "__main__":
main()

18
python/events/pycode.sh Normal file
View File

@ -0,0 +1,18 @@
cd account
python ktg.py
cd ../file
python ktg.py
cd ../group
python ktg.py
cd ../message/personal
python ktg.py
cd ../group
python ktg.py
cd ../../personal
python ktg.py
cd ../passkey
python ktg.py
cd ../other
python ktg.py
cd ../system
python ktg.py

View File

@ -0,0 +1,42 @@
# ktg.py
import sys
sys.path.append("..") # 添加父目录到模块搜索路径
import KtEventGenerator as kg
def main():
# Kotlin事件类模板
kotlin_template_system = """
package top.r3944realms.ltdmanager.napcat.events.{path}
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* {event_description}事件
* @property data 响应数据
*/
@Serializable
data class {class_name}(
) : {super_class}Event() {{
override fun subtype(): String {{
return "{original_name}"
}}
}}
"""
api_paths = [
# 账号控制
"/get_robot_uin_range", # 获取机器人可操作的账号范围(多账号托管时使用)
"/bot_exit", # 强制退出当前机器人账号(主动下线)
# 协议级操作
"/send_packet", # 发送原始协议数据包需熟悉QQ协议格式
"/nc_get_packet_status", # 查询自定义数据包的状态(如发送结果、回包状态)
# 系统信息
"/get_version_info" # 获取机器人框架/客户端的版本信息
]
kg.generateEventKt("system", "AbstractSystem", api_paths, kotlin_template_system)
if __name__ == "__main__":
main()

View File

@ -1,61 +1,29 @@
package top.r3944realms.ltdmanager
import org.slf4j.LoggerFactory
import top.r3944realms.ltdmanager.napcat.data.Sex
import top.r3944realms.ltdmanager.napcat.events.NapCatEvent
import top.r3944realms.ltdmanager.napcat.events.account.SetQQProfileEvent
import top.r3944realms.ltdmanager.napcat.requests.account.SetQQProfileRequest
import top.r3944realms.ltdmanager.napcat.events.group.SetGroupPortraitEvent
import top.r3944realms.ltdmanager.napcat.events.group.SetGroupSearchEvent
import top.r3944realms.ltdmanager.napcat.events.personal.CanSendImageEvent
import top.r3944realms.ltdmanager.napcat.requests.account.SetOnlineStatusRequest
fun main() {
val logger = LoggerFactory.getLogger("log")
logger.info("Start")
// 创建请求
val request = SetQQProfileRequest(
nickname = "123",
personalNote = "232",
sex = Sex.FEMALE
)
// 序列化会自动添加type字段
val jsonStr = request.toJSON()
logger.info("Serialized: {}", jsonStr)
// 输出示例: {"type":"account/setQQProfile","nickname":"123","personal_note":"232","sex":"2"}
val decodeJson =
"""
val toJSON = SetOnlineStatusRequest.ONLINE.toJSON()
logger.info("S:{}",toJSON)
val str: String = """
{
"status": "ok",
"retcode": 0,
"data": {
"result": 0,
"errMsg": "string"
},
"data": null,
"message": "string",
"wording": "string",
"echo": "string"
}
""".trimIndent();
try {
when (val decoded = NapCatEvent.decodeEvent(decodeJson, request.type())) {
is SetQQProfileEvent -> {
println("""
反序列化成功:
{
"status": ${decoded.status},
"retcode": ${decoded.retcode},
"data": {
"result": ${decoded.data.result},
"errMsg": ${decoded.data.errorMsg}
},
"message": ${decoded.message},
"wording": ${decoded.wording},
"echo": ${decoded.echo}
}
""".trimIndent())
}
else -> println("未知请求类型")
}
} catch (e: Exception) {
println("反序列化失败: ${e.message}")
""".trimIndent()
val decodeEvent = NapCatEvent.decodeEvent(str, "group/set_group_search")
if (decodeEvent is SetGroupSearchEvent) {
logger.info("data:{}",decodeEvent.data)
}
}

View File

@ -1,4 +1,21 @@
package top.r3944realms.ltdmanager.napcat.data
class Author {
}
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class Author (
@SerialName("groupId")
val groupID: String,
val groupName: String,
@SerialName("numId")
val numID: String,
@SerialName("strId")
val strID: String,
val type: Double,
val uid: String
)

View File

@ -1,4 +1,40 @@
package top.r3944realms.ltdmanager.napcat.data
class CharBoxElement {
import kotlinx.serialization.Serializable
@Serializable
data class CharBoxElement (
val charBox: CharBoxCharBox,
val charText: String
) {
@Serializable
data class CharBoxCharBox (
/**
* 顶点坐标
*/
val pt1: CharBoxPt,
/**
* 顶点坐标
*/
val pt2: CharBoxPt,
/**
* 顶点坐标
*/
val pt3: CharBoxPt,
/**
* 顶点坐标
*/
val pt4: CharBoxPt
)
/**
* 顶点坐标
*/
@Serializable
data class CharBoxPt (
val x: String,
val y: String
)
}

View File

@ -1,4 +1,25 @@
package top.r3944realms.ltdmanager.napcat.data
class Character {
}
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class Character (
/**
* 人物ID
*/
@SerialName("character_id")
val characterID: String,
/**
* 人物名字
*/
@SerialName("character_name")
val characterName: String,
/**
* 试听网址
*/
@SerialName("preview_url")
val previewURL: String
)

View File

@ -1,4 +1,28 @@
package top.r3944realms.ltdmanager.napcat.data
class CollectionItemList {
}
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class CollectionItemList (
val author: Author,
val bid: Double,
val category: Double,
val cid: String,
val collectTime: String,
val createTime: String,
@SerialName("customGroupId")
val customGroupID: Double,
val modifyTime: String,
val securityBeat: Boolean,
val sequence: String,
@SerialName("shareUrl")
val shareURL: String,
val status: Double,
val summary: Summary,
val type: Double
)

View File

@ -1,4 +1,10 @@
package top.r3944realms.ltdmanager.napcat.data
class CollectionSearchList {
}
import kotlinx.serialization.Serializable
@Serializable
data class CollectionSearchList (
val bottomTimeStamp: String,
val collectionItemList: List<CollectionItemList>,
val hasMore: Boolean
)

View File

@ -0,0 +1,15 @@
package top.r3944realms.ltdmanager.napcat.data
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class EmojiLikesList (
@SerialName("headUrl")
val headURL: String,
val nickName: String,
@SerialName("tinyId")
val tinyID: String
)

View File

@ -1,4 +1,29 @@
package top.r3944realms.ltdmanager.napcat.data
class FriendeInfo {
}
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
/**
* 好友信息
*/
@Serializable
data class FriendInfo(
@SerialName("birthday_year")
val birthdayYear: Int,
@SerialName("birthday_month")
val birthdayMonth: Int,
@SerialName("birthday_day")
val birthdayDay: Int,
@SerialName("user_id")
val userId: Long,
val age: Int,
@SerialName("phone_number")
val phoneNum: String,
val email: String,
@SerialName("category_id")
val categoryId: Int,
val nickname: String,
val remark: String,
val sex: String,
val level: Int
)

View File

@ -2,6 +2,9 @@ package top.r3944realms.ltdmanager.napcat.data
import kotlinx.serialization.Serializable
/**
* ID
*/
@Serializable
sealed class ID {
class DoubleValue(val value: Double) : ID()

View File

@ -0,0 +1,18 @@
package top.r3944realms.ltdmanager.napcat.data
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
enum class MessageType(val value: String) {
@SerialName("at") At("at"),
@SerialName("face") Face("face"),
@SerialName("file") File("file"),
@SerialName("forward") Forward("forward"),
@SerialName("image") Image("image"),
@SerialName("json") JSON("json"),
@SerialName("record") Record("record"),
@SerialName("reply") Reply("reply"),
@SerialName("text") Text("text"),
@SerialName("video") Video("video");
}

View File

@ -0,0 +1,9 @@
package top.r3944realms.ltdmanager.napcat.data
import kotlinx.serialization.Serializable
@Serializable
sealed class Qq {
class DoubleValue(val value: Double) : Qq()
class StringValue(val value: String) : Qq()
}

View File

@ -0,0 +1,11 @@
package top.r3944realms.ltdmanager.napcat.data
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
enum class Role(val value: String) {
@SerialName("admin") Admin("admin"),
@SerialName("member") Member("member"),
@SerialName("owner") Owner("owner");
}

View File

@ -0,0 +1,19 @@
package top.r3944realms.ltdmanager.napcat.data
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
/**
* sender
*/
@Serializable
data class Sender (
val age: Double? = null,
val card: String,
val nickname: String,
val role: Role? = null,
val sex: SexV2? = null,
@SerialName("user_id")
val userID: Double
)

View File

@ -0,0 +1,14 @@
package top.r3944realms.ltdmanager.napcat.data;
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
/**
* 回应格式不统一导致有了第二版本
*/
@Serializable
enum class SexV2(val value: String) {
@SerialName("female") FEMALE("female"),
@SerialName("male") MALE("male"),
@SerialName("unknown") UNKNOWN("unknown");
}

View File

@ -1,4 +1,15 @@
package top.r3944realms.ltdmanager.napcat.data
class Summary {
}
import kotlinx.serialization.Serializable
@Serializable
data class Summary (
val audioSummary: String,
val fileSummary: String,
val gallerySummary: String,
val linkSummary: String,
val locationSummary: String,
val richMediaSummary: String,
val textSummary: String,
val videoSummary: String
)

View File

@ -42,18 +42,43 @@ abstract class AbstractAccountEvent(
override fun type(): String {
return "account/" + subtype()
}
//TODO 太烦了 也许该考虑反射或代码生成
companion object {
val eventTypeMap by lazy {
mutableMapOf<String, KSerializer<out NapCatEvent>>().apply {
put("account/set_qq_profile", SetQQProfileEvent.serializer())
put("account/ArkSharePeer", GetArkSharePeerEvent.serializer())
put("account/ArkSharePeer", ArkSharePeerEvent.serializer())
put("account/get_doubt_friends_add_request", GetDoubtFriendsAddRequestEvent.serializer())
put("account/set_doubt_friends_add_request", SetDoubtFriendsAddRequestEvent.serializer())
put("account/get_online_clients", GetOnlineClientsEvent.serializer())
put("account/mark_msg_as_read", MarkMsgAsReadEvent.serializer())
put("account/set_online_status", SetOnlineStatusEvent.serializer())
put("account/ArkShareGroup", MarkMsgAsReadEvent.serializer())
put("account/get_friends_with_category",GetFriendsWithCategoryEvent.serializer())
put("account/create_collection",CreateCollectionEvent.serializer())
put("account/delete_friend",DeleteFriendEvent.serializer())
put("account/fetch_custom_face",FetchCustomFaceEvent.serializer())
put("account/get_friend_list",GetFriendListEvent.serializer())
put("account/get_login_info",GetLoginInfoEvent.serializer())
put("account/get_mini_app_ark",GetMiniAppArkEvent.serializer())
put("account/_get_model_show",GetModelShowEvent.serializer())
put("account/get_profile_like",GetProfileLikeEvent.serializer())
put("account/get_recent_contact",GetRecentContactEvent.serializer())
put("account/get_status",GetStatusEvent.serializer())
put("account/get_stranger_info",GetStrangerInfoEvent.serializer())
put("account/get_unidirectional_friend_list",GetUnidirectionalFriendListEvent.serializer())
put("account/_mark_all_as_read",MarkAllAsReadEvent.serializer())
put("account/mark_group_msg_as_read",MarkGroupMsgAsReadEvent.serializer())
put("account/mark_private_msg_as_read",MarkPrivateMsgAsReadEvent.serializer())
put("account/nc_get_user_status",NcGetUserStatusEvent.serializer())
put("account/send_like",SendLikeEvent.serializer())
put("account/set_diy_online_status",SetDiyOnlineStatusEvent.serializer())
put("account/set_friend_add_request",SetFriendAddRequestEvent.serializer())
put("account/set_friend_remark",SetFriendRemarkEvent.serializer())
put("account/_set_model_show",SetModelShowEvent.serializer())
put("account/set_qq_avatar",SetQqAvatarEvent.serializer())
put("account/set_self_longnick",SetSelfLongnickEvent.serializer())
}
}
internal val json: Json by lazy {
@ -61,12 +86,38 @@ abstract class AbstractAccountEvent(
ignoreUnknownKeys = true
serializersModule = SerializersModule {
polymorphic(NapCatEvent::class) {
subclass(GetArkSharePeerEvent::class)
subclass(SetQQProfileEvent::class)
subclass(ArkSharePeerEvent::class)
subclass(GetDoubtFriendsAddRequestEvent::class)
subclass(SetDoubtFriendsAddRequestEvent::class)
subclass(GetOnlineClientsEvent::class)
subclass(MarkMsgAsReadEvent::class)
subclass(SetOnlineStatusEvent::class)
subclass(ArkShareGroupEvent::class)
subclass(GetFriendsWithCategoryEvent::class)
subclass(CreateCollectionEvent::class)
subclass(DeleteFriendEvent::class)
subclass(FetchCustomFaceEvent::class)
subclass(GetFriendListEvent::class)
subclass(GetLoginInfoEvent::class)
subclass(GetMiniAppArkEvent::class)
subclass(GetModelShowEvent::class)
subclass(GetProfileLikeEvent::class)
subclass(GetRecentContactEvent::class)
subclass(GetStatusEvent::class)
subclass(GetStrangerInfoEvent::class)
subclass(GetUnidirectionalFriendListEvent::class)
subclass(MarkAllAsReadEvent::class)
subclass(MarkGroupMsgAsReadEvent::class)
subclass(MarkPrivateMsgAsReadEvent::class)
subclass(NcGetUserStatusEvent::class)
subclass(SendLikeEvent::class)
subclass(SetDiyOnlineStatusEvent::class)
subclass(SetFriendAddRequestEvent::class)
subclass(SetFriendRemarkEvent::class)
subclass(SetModelShowEvent::class)
subclass(SetQqAvatarEvent::class)
subclass(SetSelfLongnickEvent::class)
}
}
}

View File

@ -9,7 +9,7 @@ import kotlinx.serialization.Transient
* @property data 响应数据
*/
@Serializable
data class GetArkSharePeerEvent(
data class ArkSharePeerEvent(
@Transient
val status0: Status = Status.Ok,
@Transient

View File

@ -0,0 +1,34 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* CreateCollection事件
* @property data 响应数据
*/
@Serializable
data class CreateCollectionEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data(
val result: Double,
val errMsg: String
)
override fun subtype(): String {
return "create_collection"
}
}

View File

@ -0,0 +1,34 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* DeleteFriend事件
* @property data 响应数据
*/
@Serializable
data class DeleteFriendEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data(
val result: Double,
val errMsg: String
)
override fun subtype(): String {
return "delete_friend"
}
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonArray
/**
* FetchCustomFace事件
* @property data 响应数据
*/
@Serializable
data class FetchCustomFaceEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonArray
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "fetch_custom_face"
}
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonArray
/**
* GetFriendList事件
* @property data 响应数据
*/
@Serializable
data class GetFriendListEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonArray
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "get_friend_list"
}
}

View File

@ -5,7 +5,8 @@ import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import top.r3944realms.ltdmanager.napcat.data.FriendInfo
data class GetFriendsWithCategory(
@Serializable
data class GetFriendsWithCategoryEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
@ -19,7 +20,7 @@ data class GetFriendsWithCategory(
val data: Datum
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String = "/get_friends_with_category"
override fun subtype(): String = "get_friends_with_category"
@Serializable
data class Datum (
/**

View File

@ -0,0 +1,36 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* GetLoginInfo事件
* @property data 响应数据
*/
@Serializable
data class GetLoginInfoEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data(
@SerialName("user_id")
val userId: Double,
val nickname: String
)
override fun subtype(): String {
return "get_login_info"
}
}

View File

@ -0,0 +1,136 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonObject
/**
* GetMiniAppArk事件
* @property data 响应数据
*/
@Serializable
data class GetMiniAppArkEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
/**
* rawArkData = true
*
* rawArkData = false
*/
@Serializable
data class Data (
val appName: String? = null,
val appView: String? = null,
val config: Config,
val desc: String? = null,
val metaData: MetaData? = null,
val prompt: String,
val ver: String,
val app: String? = null,
val meta: Meta? = null,
val miniappOpenRefer: String? = null,
val miniappShareOrigin: Double? = null,
val view: String? = null
)
@Serializable
data class Config (
val autoSize: Double,
val ctime: Double,
val forward: Double,
val height: Double,
val token: String,
val type: String,
val width: Double
)
@Serializable
data class Meta (
@SerialName("detail_1")
val detail1: MetaDetail1
)
@Serializable
data class MetaDetail1 (
val appid: String,
val appType: Double,
val desc: String,
val gamePoints: String,
@SerialName("gamePointsUrl")
val gamePointsURL: String,
val host: PurpleHost,
val icon: String,
val preview: String,
val scene: Double,
val shareOrigin: Double,
val shareTemplateData: JsonObject,
@SerialName("shareTemplateId")
val shareTemplateID: String,
val showLittleTail: String,
val title: String,
val url: String
)
@Serializable
data class PurpleHost (
val nick: String,
val uin: Double
)
@Serializable
data class MetaData (
@SerialName("detail_1")
val detail1: MetaDataDetail1
)
@Serializable
data class MetaDataDetail1 (
val appid: String,
val appType: Double,
val desc: String,
val gamePoints: String,
@SerialName("gamePointsUrl")
val gamePointsURL: String,
val host: FluffyHost,
val icon: String,
val preview: String,
val scene: Double,
val shareOrigin: Double,
val shareTemplateData: JsonObject,
@SerialName("shareTemplateId")
val shareTemplateID: String,
val showLittleTail: String,
val title: String,
val url: String
)
@Serializable
data class FluffyHost (
val nick: String,
val uin: Double
)
override fun subtype(): String {
return "get_mini_app_ark"
}
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonElement
/**
* GetModelShow事件
* @property data 响应数据
*/
@Serializable
data class GetModelShowEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonElement? = null
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "_get_model_show"
}
}

View File

@ -0,0 +1,123 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* GetProfileLike事件
* @property data 响应数据
*/
@Serializable
data class GetProfileLikeEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data (
/**
* 互赞信息
*/
val favoriteInfo: FavoriteInfo,
val time: Double,
val uid: String,
/**
* 点赞信息
*/
val voteInfo: VoteInfo
)
/**
* 互赞信息
*/
@Serializable
data class FavoriteInfo (
/**
* 最后点赞时间不是时间戳
*/
@SerialName("last_time")
val lastTime: Double,
/**
* 上次次数
*/
@SerialName("today_count")
val todayCount: Double,
/**
* 总次数
*/
@SerialName("total_count")
val totalCount: Double,
val userInfos: List<LikeInfo>
)
/**
* 点赞信息
*/
@Serializable
data class LikeInfo (
val age: Double,
val bAvailableCnt: Double,
val bTodayVotedCnt: Double,
val count: Double,
@SerialName("customId")
val customID: Double,
val gender: Double,
val giftCount: Double,
val isFriend: Boolean,
val isSvip: Boolean,
val isvip: Boolean,
val lastCharged: Double,
val latestTime: Double,
val nick: String,
val src: Double,
val uid: String,
val uin: Double
)
/**
* 点赞信息
*/
@Serializable
data class VoteInfo (
@SerialName("last_visit_time")
val lastVisitTime: Double,
/**
* 点赞次数
*/
@SerialName("new_count")
val newCount: Double,
@SerialName("new_nearby_count")
val newNearbyCount: Double,
/**
* 总次数
*/
@SerialName("total_count")
val totalCount: Double,
val userInfos: List<LikeInfo>
)
override fun subtype(): String {
return "get_profile_like"
}
}

View File

@ -0,0 +1,212 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import top.r3944realms.ltdmanager.napcat.data.MessageType
import top.r3944realms.ltdmanager.napcat.data.Qq
import top.r3944realms.ltdmanager.napcat.data.Sender
/**
* GetRecentContact事件
* @property data 响应数据
*/
@Serializable
data class GetRecentContactEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: List<Datum>
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Datum (
val chatType: Double,
/**
* 最新消息内容
*/
val lastestMsg: LastestMsg? = null,
@SerialName("msgId")
val msgID: String,
/**
* 消息时间
*/
val msgTime: String,
/**
* 对方昵称
*/
val peerName: String,
/**
* 对方账号
*/
val peerUin: String,
val remark: String,
val sendMemberName: String,
/**
* 发送人昵称
*/
val sendNickName: String
)
/**
* 最新消息内容
*/
@Serializable
data class LastestMsg (
val font: Double,
@SerialName("group_id")
val groupID: Double? = null,
val message: List<TextMsg>,
@SerialName("message_format")
val messageFormat: String,
@SerialName("message_type")
val messageType: String,
@SerialName("post_type")
val postType: String,
@SerialName("raw_message")
val rawMessage: String,
@SerialName("real_seq")
val realSeq: String,
@SerialName("self_id")
val selfID: Double,
val sender: Sender,
@SerialName("sub_type")
val subType: String,
val time: Double,
@SerialName("user_id")
val userID: Double
)
/**
* 消息详情
*/
@Serializable
data class SpecificMsg (
val font: Double,
@SerialName("group_id")
val groupID: Double? = null,
val message: List<TextMsg>,
@SerialName("message_format")
val messageFormat: String,
@SerialName("message_id")
val messageID: Double,
@SerialName("message_seq")
val messageSeq: Double,
@SerialName("message_type")
val messageType: String,
@SerialName("post_type")
val postType: String,
@SerialName("raw_message")
val rawMessage: String,
@SerialName("real_id")
val realID: Double,
@SerialName("real_seq")
val realSeq: String,
@SerialName("self_id")
val selfID: Double,
val sender: Sender,
@SerialName("sub_type")
val subType: String,
val time: Double,
@SerialName("user_id")
val userID: Double
)
@Serializable
sealed class Content {
class StringValue(val value: String) : Content()
class SpecificMsgList(val value: List<SpecificMsg>) : Content()
}
@Serializable
data class Data (
val text: String? = null,
val name: String? = null,
val qq: Qq? = null,
val id: Qq? = null,
val file: String? = null,
/**
* 外显
*/
val summary: String? = null,
val data: String? = null,
val content: Content? = null
)
/**
* 文本消息
*
* 艾特消息
*
* 表情消息
*
* 图片消息
*
* 文件消息
*
* 回复消息
*
* JSON消息
*
* 语音消息
*
* 视频消息
*
* markdown消息
*
* 消息forward
*/
@Serializable
data class TextMsg (
val data: Data,
val type: MessageType
)
override fun subtype(): String {
return "get_recent_contact"
}
}

View File

@ -0,0 +1,36 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonObject
/**
* GetStatus事件
* @property data 响应数据
*/
@Serializable
data class GetStatusEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data (
val good: Boolean,
val online: Boolean,
val stat: JsonObject
)
override fun subtype(): String {
return "get_status"
}
}

View File

@ -0,0 +1,102 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* GetStrangerInfo事件
* @property data 响应数据
*/
@Serializable
data class GetStrangerInfoEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data (
/**
* 年龄
*/
val age: Double,
/**
* 是否会员
*/
@SerialName("is_vip")
val isVip: Boolean,
/**
* 是否年费会员
*/
@SerialName("is_years_vip")
val isYearsVip: Boolean,
/**
* 连续登录天数
*/
@SerialName("login_days")
val loginDays: Double,
/**
* 个性签名
*/
@SerialName("long_nick")
val longNick: String,
/**
* 昵称
*/
val nickname: String,
val qid: String,
/**
* 账号等级
*/
val qqLevel: Double,
/**
* 注册时间
*/
@SerialName("reg_time")
val regTime: Double,
/**
* 备注
*/
val remark: String,
/**
* 性别
*/
val sex: String,
val status: Double,
val uid: String,
val uin: String,
@SerialName("user_id")
val userID: Double,
/**
* 会员等级
*/
@SerialName("vip_level")
val vipLevel: Double
)
override fun subtype(): String {
return "get_stranger_info"
}
}

View File

@ -0,0 +1,43 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import top.r3944realms.ltdmanager.napcat.Developing
/**
* GetUnidirectionalFriendList事件
* @property data 响应数据
*/
@Developing
@Serializable
data class GetUnidirectionalFriendListEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: List<Datum>
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Datum (
val age: Double,
@SerialName("nick_name")
val nickName: String,
val source: String,
val uid: String,
val uin: Double
)
override fun subtype(): String {
return "get_unidirectional_friend_list"
}
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonElement
/**
* MarkAllAsRead事件
* @property data 响应数据
*/
@Serializable
data class MarkAllAsReadEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonElement? = null
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "_mark_all_as_read"
}
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonElement
/**
* MarkGroupMsgAsRead事件
* @property data 响应数据
*/
@Serializable
data class MarkGroupMsgAsReadEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonElement? = null
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "mark_group_msg_as_read"
}
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonElement
/**
* MarkPrivateMsgAsRead事件
* @property data 响应数据
*/
@Serializable
data class MarkPrivateMsgAsReadEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonElement? = null
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "mark_private_msg_as_read"
}
}

View File

@ -0,0 +1,36 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* NcGetUserStatus事件
* @property data 响应数据
*/
@Serializable
data class NcGetUserStatusEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data(
val status:Double,
@SerialName("ext_status")
val extStatus:Double
)
override fun subtype(): String {
return "nc_get_user_status"
}
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonElement
/**
* SendLike事件
* @property data 响应数据
*/
@Serializable
data class SendLikeEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonElement? = null
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "send_like"
}
}

View File

@ -0,0 +1,30 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* SetDiyOnlineStatus事件
* @property data 响应数据
*/
@Serializable
data class SetDiyOnlineStatusEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: String
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "set_diy_online_status"
}
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonElement
/**
* SetFriendAddRequest事件
* @property data 响应数据
*/
@Serializable
data class SetFriendAddRequestEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonElement? = null
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "set_friend_add_request"
}
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonElement
/**
* SetFriendRemark事件
* @property data 响应数据
*/
@Serializable
data class SetFriendRemarkEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonElement? = null
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "set_friend_remark"
}
}

View File

@ -0,0 +1,33 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonElement
import top.r3944realms.ltdmanager.napcat.Developing
/**
* SetModelShow事件
* @property data 响应数据
*/
@Developing
@Serializable
data class SetModelShowEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonElement? = null
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "_set_model_show"
}
}

View File

@ -19,6 +19,6 @@ data class SetOnlineStatusEvent(
val data: JsonElement? = null,
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String = "/set_online_status"
override fun subtype(): String = "set_online_status"
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonElement
/**
* SetQqAvatar事件
* @property data 响应数据
*/
@Serializable
data class SetQqAvatarEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonElement? = null
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "set_qq_avatar"
}
}

View File

@ -0,0 +1,34 @@
package top.r3944realms.ltdmanager.napcat.events.account
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* SetSelfLongnick事件
* @property data 响应数据
*/
@Serializable
data class SetSelfLongnickEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractAccountEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data(
val result: Double,
val errMsg: String
)
override fun subtype(): String {
return "set_self_longnick"
}
}

View File

@ -1,10 +1,12 @@
package top.r3944realms.ltdmanager.napcat.events.file
import kotlinx.serialization.KSerializer
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.polymorphic
import kotlinx.serialization.modules.subclass
import top.r3944realms.ltdmanager.napcat.events.NapCatEvent
/**
@ -38,11 +40,115 @@ abstract class AbstractFileEvent(
*/
open val echo: String? = null
) : NapCatEvent() {
@Serializable
data class OkData(
val ok:Boolean
)
@Serializable
data class UrlData(
val url: String
)
/**
* 群文件信息
*/
@Serializable
data class GroupFileInformation (
val busid: Double,
@SerialName("dead_time")
val deadTime: Double,
@SerialName("download_times")
val downloadTimes: Double,
@SerialName("file_id")
val fileID: String,
@SerialName("file_name")
val fileName: String,
@SerialName("file_size")
val fileSize: Double,
@SerialName("group_id")
val groupID: Double,
@SerialName("modify_time")
val modifyTime: Double,
val size: Double,
@SerialName("upload_time")
val uploadTime: Double,
val uploader: Double,
@SerialName("uploader_name")
val uploaderName: String
)
/**
* 群文件夹信息
*/
@Serializable
data class GroupFolderInformation (
/**
* 创建时间
*/
@SerialName("create_time")
val createTime: Double,
/**
* 创建人账号
*/
val creator: Double,
/**
* 创建人昵称
*/
@SerialName("creator_name")
val creatorName: String,
val folder: String,
@SerialName("folder_id")
val folderID: String,
/**
* 文件夹名称
*/
@SerialName("folder_name")
val folderName: String,
@SerialName("group_id")
val groupID: Double,
/**
* 文件数量
*/
@SerialName("total_file_count")
val totalFileCount: Double
)
override fun type(): String = "file/" + subtype()
companion object {
val eventTypeMap by lazy {
mutableMapOf<String, KSerializer<out NapCatEvent>>().apply {
put("file/move_group_file", MoveGroupFileEvent.serializer())
put("file/trans_group_file", TransGroupFileEvent.serializer())
put("file/rename_group_file", RenameGroupFileEvent.serializer())
put("file/upload_group_file",UploadGroupFileEvent.serializer())
put("file/create_group_file_folder",CreateGroupFileFolderEvent.serializer())
put("file/delete_group_file", DeleteGroupFileEvent.serializer())
put("file/delete_group_folder", DeleteGroupFolderEvent.serializer())
put("file/get_group_file_system_info", GetGroupFileSystemInfoEvent.serializer())
put("file/get_group_root_files", GetGroupRootFilesEvent.serializer())
put("file/get_group_files_by_folder", GetGroupFilesByFolderEvent.serializer())
put("file/get_group_file_url",GetGroupFileUrlEvent.serializer())
put("file/upload_private_file", UploadGroupFileEvent.serializer())
put("file/get_private_file_url", GetPrivateFileUrlEvent.serializer())
put("file/get_file", GetFileEvent.serializer())
put("file/download_file", DownloadFileEvent.serializer())
put("file/clean_cache", CleanCacheEvent.serializer())
}
}
internal val json: Json by lazy {
@ -50,7 +156,22 @@ abstract class AbstractFileEvent(
ignoreUnknownKeys = true
serializersModule = SerializersModule {
polymorphic(NapCatEvent::class) {
subclass(MoveGroupFileEvent::class)
subclass(TransGroupFileEvent::class)
subclass(RenameGroupFileEvent::class)
subclass(UploadGroupFileEvent::class)
subclass(CreateGroupFileFolderEvent::class)
subclass(DeleteGroupFileEvent::class)
subclass(DeleteGroupFolderEvent::class)
subclass(GetGroupFileSystemInfoEvent::class)
subclass(GetGroupRootFilesEvent::class)
subclass(GetGroupFilesByFolderEvent::class)
subclass(GetGroupFileUrlEvent::class)
subclass(UploadGroupFileEvent::class)
subclass(GetPrivateFileUrlEvent::class)
subclass(GetFileEvent::class)
subclass(DownloadFileEvent::class)
subclass(CleanCacheEvent::class)
}
}
}

View File

@ -0,0 +1,33 @@
package top.r3944realms.ltdmanager.napcat.events.file
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonElement
import top.r3944realms.ltdmanager.napcat.Developing
/**
* CleanCache事件
* @property data 响应数据
*/
@Developing
@Serializable
data class CleanCacheEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonElement? = null
) : AbstractFileEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "clean_cache"
}
}

View File

@ -0,0 +1,81 @@
package top.r3944realms.ltdmanager.napcat.events.file
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* CreateGroupFileFolder事件
* @property data 响应数据
*/
@Serializable
data class CreateGroupFileFolderEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractFileEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data (
val groupItem: GroupItem,
val result: Result
)
@Serializable
data class GroupItem (
val fileInfo: String? = null,
/**
* 文件夹信息
*/
val folderInfo: FolderInfo,
@SerialName("peerId")
val peerID: String,
val type: Double
)
/**
* 文件夹信息
*/
@Serializable
data class FolderInfo (
val createTime: Double,
val createUin: String,
val creatorName: String,
@SerialName("folderId")
val folderID: String,
val folderName: String,
val modifyName: String,
val modifyTime: Double,
val modifyUin: String,
@SerialName("parentFolderId")
val parentFolderID: String,
val totalFileCount: Double,
val usedSpace: String
)
@Serializable
data class Result (
val clientWording: String,
val retCode: Double,
val retMsg: String
)
override fun subtype(): String {
return "create_group_file_folder"
}
}

View File

@ -0,0 +1,54 @@
package top.r3944realms.ltdmanager.napcat.events.file
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* DeleteGroupFile事件
* @property data 响应数据
*/
@Serializable
data class DeleteGroupFileEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractFileEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data (
val errMsg: String,
val result: Double,
val transGroupFileResult: TransGroupFileResult
)
@Serializable
data class TransGroupFileResult (
@SerialName("failFileIdList")
val failFileIDList: List<String>,
val result: Result,
@SerialName("successFileIdList")
val successFileIDList: List<String>
)
@Serializable
data class Result (
val clientWording: String,
val retCode: Double,
val retMsg: String
)
override fun subtype(): String {
return "delete_group_file"
}
}

View File

@ -0,0 +1,36 @@
package top.r3944realms.ltdmanager.napcat.events.file
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* DeleteGroupFolder事件
* @property data 响应数据
*/
@Serializable
data class DeleteGroupFolderEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractFileEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data (
val clientWording: String,
val retCode: Double,
val retMsg: String
)
override fun subtype(): String {
return "delete_group_folder"
}
}

View File

@ -0,0 +1,33 @@
package top.r3944realms.ltdmanager.napcat.events.file
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* DownloadFile事件
* @property data 响应数据
*/
@Serializable
data class DownloadFileEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractFileEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data(
val file: String
)
override fun subtype(): String {
return "download_file"
}
}

View File

@ -0,0 +1,56 @@
package top.r3944realms.ltdmanager.napcat.events.file
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* GetFile事件
* @property data 响应数据
*/
@Serializable
data class GetFileEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractFileEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data (
val base64: String,
/**
* 路径或链接
*/
val file: String,
/**
* 文件名
*/
@SerialName("file_name")
val fileName: String,
/**
* 文件大小
*/
@SerialName("file_size")
val fileSize: String,
/**
* 路径或链接
*/
val url: String
)
override fun subtype(): String {
return "get_file"
}
}

View File

@ -0,0 +1,56 @@
package top.r3944realms.ltdmanager.napcat.events.file
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* GetGroupFileSystemInfo事件
* @property data 响应数据
*/
@Serializable
data class GetGroupFileSystemInfoEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractFileEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data (
/**
* 文件总数
*/
@SerialName("file_count")
val fileCount: Double,
/**
* 文件上限
*/
@SerialName("limit_count")
val limitCount: Double,
/**
* 空间上限
*/
@SerialName("total_space")
val totalSpace: Double,
/**
* 已使用空间
*/
@SerialName("used_space")
val usedSpace: Double
)
override fun subtype(): String {
return "get_group_file_system_info"
}
}

View File

@ -0,0 +1,30 @@
package top.r3944realms.ltdmanager.napcat.events.file
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* GetGroupFileUrl事件
* @property data 响应数据
*/
@Serializable
data class GetGroupFileUrlEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: UrlData
) : AbstractFileEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "get_group_file_url"
}
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.file
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import top.r3944realms.ltdmanager.napcat.events.file.GetGroupRootFilesEvent.FileData
/**
* GetGroupFilesByFolder事件
* @property data 响应数据
*/
@Serializable
data class GetGroupFilesByFolderEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: FileData
) : AbstractFileEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "get_group_files_by_folder"
}
}

View File

@ -0,0 +1,43 @@
package top.r3944realms.ltdmanager.napcat.events.file
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* GetGroupRootFiles事件
* @property data 响应数据
*/
@Serializable
data class GetGroupRootFilesEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: FileData
) : AbstractFileEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class FileData (
/**
* 文件列表
*/
val files: List<GroupFileInformation>,
/**
* 文件夹列表
*/
val folders: List<GroupFolderInformation>
)
override fun subtype(): String {
return "get_group_root_files"
}
}

View File

@ -0,0 +1,30 @@
package top.r3944realms.ltdmanager.napcat.events.file
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* GetPrivateFileUrl事件
* @property data 响应数据
*/
@Serializable
data class GetPrivateFileUrlEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: UrlData
) : AbstractFileEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "get_private_file_url"
}
}

View File

@ -0,0 +1,30 @@
package top.r3944realms.ltdmanager.napcat.events.file
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* MoveGroupFile事件
* @property okData 响应数据
*/
@Serializable
data class MoveGroupFileEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: OkData
) : AbstractFileEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "move_group_file"
}
}

View File

@ -0,0 +1,30 @@
package top.r3944realms.ltdmanager.napcat.events.file
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* RenameGroupFile事件
* @property data 响应数据
*/
@Serializable
data class RenameGroupFileEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: OkData
) : AbstractFileEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "rename_group_file"
}
}

View File

@ -0,0 +1,30 @@
package top.r3944realms.ltdmanager.napcat.events.file
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* TransGroupFile事件
* @property data 响应数据
*/
@Serializable
data class TransGroupFileEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: OkData
) : AbstractFileEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "trans_group_file"
}
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.file
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonElement
/**
* UploadGroupFile事件
* @property data 响应数据
*/
@Serializable
data class UploadGroupFileEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonElement? = null
) : AbstractFileEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "upload_group_file"
}
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.file
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonElement
/**
* UploadPrivateFile事件
* @property data 响应数据
*/
@Serializable
data class UploadPrivateFileEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonElement? = null,
) : AbstractFileEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "upload_private_file"
}
}

View File

@ -5,6 +5,7 @@ import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.polymorphic
import kotlinx.serialization.modules.subclass
import top.r3944realms.ltdmanager.napcat.events.NapCatEvent
/**
@ -43,7 +44,40 @@ open val echo: String? = null
companion object {
val eventTypeMap by lazy {
mutableMapOf<String, KSerializer<out NapCatEvent>>().apply {
put("group/get_group_info",GetGroupInfoEvent.serializer())
put("group/get_group_info_ex",GetGroupInfoExEvent.serializer())
put("group/get_group_detail_info",GetGroupDetailInfoEvent.serializer())
put("group/get_group_list",GetGroupListEvent.serializer())
put("group/get_group_member_info",GetGroupMemberInfoEvent.serializer())
put("group/get_group_member_list",GetGroupMemberListEvent.serializer())
put("group/get_group_honor_info",GetGroupHonorInfoEvent.serializer())
put("group/get_group_at_all_remain",GetGroupAtAllRemainEvent.serializer())
put("group/get_group_shut_list",GetGroupShutListEvent.serializer())
put("group/get_group_ignored_notifies",GetGroupIgnoredNotifiesEvent.serializer())
put("group/get_group_system_msg",GetGroupSystemMsgEvent.serializer())
put("group/get_essence_msg_list",GetEssenceMsgListEvent.serializer())
put("group/set_group_name",SetGroupNameEvent.serializer())
put("group/set_group_portrait",SetGroupPortraitEvent.serializer())
put("group/set_group_search",SetGroupSearchEvent.serializer())
put("group/set_group_add_option",SetGroupAddOptionEvent.serializer())
put("group/set_group_robot_add_option",SetGroupRobotAddOptionEvent.serializer())
put("group/set_group_remark",SetGroupRemarkEvent.serializer())
put("group/set_group_card",SetGroupCardEvent.serializer())
put("group/set_group_special_title",SetGroupSpecialTitleEvent.serializer())
put("group/set_group_admin",SetGroupAdminEvent.serializer())
put("group/set_group_leave",SetGroupLeaveEvent.serializer())
put("group/set_essence_msg",SetEssenceMsgEvent.serializer())
put("group/delete_essence_msg", DeleteEssenceMsgEvent.serializer())
put("group/_send_group_notice",SendGroupNoticeEvent.serializer())
put("group/_get_group_notice",GetGroupNoticeEvent.serializer())
put("group/_del_group_notice",DelGroupNoticeEvent.serializer())
put("group/set_group_kick",SetGroupKickEvent.serializer())
put("group/set_group_kick_members",SetGroupKickMembersEvent.serializer())
put("group/set_group_ban",SetGroupBanEvent.serializer())
put("group/set_group_whole_ban",SetGroupWholeBanEvent.serializer())
put("group/set_group_sign",SetGroupSignEvent.serializer())
put("group/send_group_sign",SendGroupSignEvent.serializer())
put("group/set_group_add_request",SetGroupAddRequestEvent.serializer())
}
}
internal val json: Json by lazy {
@ -51,7 +85,40 @@ open val echo: String? = null
ignoreUnknownKeys = true
serializersModule = SerializersModule {
polymorphic(NapCatEvent::class) {
subclass(GetGroupInfoEvent::class)
subclass(GetGroupInfoExEvent::class)
subclass(GetGroupDetailInfoEvent::class)
subclass(GetGroupListEvent::class)
subclass(GetGroupMemberInfoEvent::class)
subclass(GetGroupMemberListEvent::class)
subclass(GetGroupHonorInfoEvent::class)
subclass(GetGroupAtAllRemainEvent::class)
subclass(GetGroupShutListEvent::class)
subclass(GetGroupIgnoredNotifiesEvent::class)
subclass(GetGroupSystemMsgEvent::class)
subclass(GetEssenceMsgListEvent::class)
subclass(SetGroupNameEvent::class)
subclass(SetGroupPortraitEvent::class)
subclass(SetGroupSearchEvent::class)
subclass(SetGroupAddOptionEvent::class)
subclass(SetGroupRobotAddOptionEvent::class)
subclass(SetGroupRemarkEvent::class)
subclass(SetGroupCardEvent::class)
subclass(SetGroupSpecialTitleEvent::class)
subclass(SetGroupAdminEvent::class)
subclass(SetGroupLeaveEvent::class)
subclass(SetEssenceMsgEvent::class)
subclass(DeleteEssenceMsgEvent::class)
subclass(SendGroupNoticeEvent::class)
subclass(GetGroupNoticeEvent::class)
subclass(DelGroupNoticeEvent::class)
subclass(SetGroupKickEvent::class)
subclass(SetGroupKickMembersEvent::class)
subclass(SetGroupBanEvent::class)
subclass(SetGroupWholeBanEvent::class)
subclass(SetGroupSignEvent::class)
subclass(SendGroupSignEvent::class)
subclass(SetGroupAddRequestEvent::class)
}
}
}

View File

@ -0,0 +1,34 @@
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* DelGroupNotice事件
* @property data 响应数据
*/
@Serializable
data class DelGroupNoticeEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractGroupEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data(
val result: Double,
val errMsg: String
)
override fun subtype(): String {
return "_del_group_notice"
}
}

View File

@ -0,0 +1,49 @@
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonObject
/**
* DeleteEssenceMsg事件
* @property data 响应数据
*/
@Serializable
data class DeleteEssenceMsgEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractGroupEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data (
val errCode: String,
val errMsg: String,
val result: Result
)
@Serializable
data class Result (
val digestTime: String,
val digestUin: String,
val msg: JsonObject,
/**
* 正常为空异常有文本提示
*/
val wording: String
)
override fun subtype(): String {
return "delete_essence_msg"
}
}

View File

@ -0,0 +1,96 @@
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* GetEssenceMsgList事件
* @property data 响应数据
*/
@Serializable
data class GetEssenceMsgListEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: List<Datum>
) : AbstractGroupEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Datum (
/**
* 消息内容
*/
val content: List<Content>,
@SerialName("message_id")
val messageID: Double,
@SerialName("msg_random")
val msgRandom: Double,
@SerialName("msg_seq")
val msgSeq: Double,
/**
* 设精人账号
*/
@SerialName("operator_id")
val operatorID: Double,
/**
* 设精人昵称
*/
@SerialName("operator_nick")
val operatorNick: String,
/**
* 设精时间
*/
@SerialName("operator_time")
val operatorTime: Double,
/**
* 发送人账号
*/
@SerialName("sender_id")
val senderID: Double,
/**
* 发送人昵称
*/
@SerialName("sender_nick")
val senderNick: String
)
/**
* 文本消息
*/
@Serializable
data class Content (
val data: Data,
val type: Type
)
@Serializable
data class Data (
val text: String? = null,
val url: String? = null
)
@Serializable
enum class Type(val value: String) {
@SerialName("image") Image("image"),
@SerialName("text") Text("text");
}
override fun subtype(): String {
return "get_essence_msg_list"
}
}

View File

@ -0,0 +1,41 @@
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* GetGroupAtAllRemain事件
* @property data 响应数据
*/
@Serializable
data class GetGroupAtAllRemainEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractGroupEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data (
@SerialName("can_at_all")
val canAtAll: Boolean,
@SerialName("remain_at_all_count_for_group")
val remainAtAllCountForGroup: Double,
@SerialName("remain_at_all_count_for_uin")
val remainAtAllCountForUin: Double
)
override fun subtype(): String {
return "get_group_at_all_remain"
}
}

View File

@ -0,0 +1,50 @@
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* GetGroupDetailInfo事件
* @property data 响应数据
*/
@Serializable
data class GetGroupDetailInfoEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractGroupEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data (
@SerialName("group_all_shut")
val groupAllShut: Double,
@SerialName("group_id")
val groupID: Double,
@SerialName("group_name")
val groupName: String,
@SerialName("group_remark")
val groupRemark: String,
@SerialName("max_member_count")
val maxMemberCount: Double,
@SerialName("member_count")
val memberCount: Double
)
override fun subtype(): String {
return "get_group_detail_info"
}
}

View File

@ -0,0 +1,91 @@
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* GetGroupHonorInfo事件
* @property data 响应数据
*/
@Serializable
data class GetGroupHonorInfoEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractGroupEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data (
/**
* 当前龙王
*/
@SerialName("current_talkative")
val currentTalkative: GroupHonorInfo,
/**
* 快乐源泉
*/
@SerialName("emotion_list")
val emotionList: List<GroupHonorInfo>,
@SerialName("group_id")
val groupID: String,
/**
* 龙王
*/
@SerialName("legend_list")
val legendList: List<GroupHonorInfo>,
/**
* 群聊炽焰
*/
@SerialName("performer_list")
val performerList: List<GroupHonorInfo>,
/**
* 冒尖小春笋
*/
@SerialName("strong_newbie_list")
val strongNewbieList: List<GroupHonorInfo>,
/**
* 群聊之火
*/
@SerialName("talkative_list")
val talkativeList: List<GroupHonorInfo>
)
/**
* 当前龙王
*
* 群荣誉信息
*/
@Serializable
data class GroupHonorInfo (
val avatar: Double? = null,
/**
* 说明
*/
val description: String? = null,
val nickname: String? = null,
@SerialName("user_id")
val userID: Double? = null
)
override fun subtype(): String {
return "get_group_honor_info"
}
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* GetGroupIgnoredNotifies事件
* @property data 响应数据
*/
@Serializable
data class GetGroupIgnoredNotifiesEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: GetGroupSystemMsgEvent.Data
) : AbstractGroupEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "get_group_ignored_notifies"
}
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonObject
/**
* GetGroupInfo事件
* @property data 响应数据
*/
@Serializable
data class GetGroupInfoEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonObject
) : AbstractGroupEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "get_group_info"
}
}

View File

@ -0,0 +1,132 @@
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* GetGroupInfoEx事件
* @property data 响应数据
*/
@Serializable
data class GetGroupInfoExEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractGroupEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data (
val extInfo: EXTInfo,
val groupCode: String,
val resultCode: Double
)
@Serializable
data class EXTInfo (
@SerialName("bindGuildId")
val bindGuildID: String,
val blacklistExpireTime: Double,
@SerialName("companyId")
val companyID: Double,
val essentialMsgPrivilege: Double,
val essentialMsgSwitch: Double,
val fullGroupExpansionSeq: String,
val fullGroupExpansionSwitch: Double,
@SerialName("gangUpId")
val gangUpID: String,
@SerialName("groupAioBindGuildId")
val groupAioBindGuildID: String,
@SerialName("groupBindGuildIds")
val groupBindGuildIDS: GroupBindGuildIDS,
val groupBindGuildSwitch: Double,
@SerialName("groupExcludeGuildIds")
val groupExcludeGuildIDS: GroupExcludeGuildIDS,
@SerialName("groupExtFlameData")
val groupEXTFlameData: GroupEXTFlameData,
val groupFlagPro1: String,
@SerialName("groupInfoExtSeq")
val groupInfoEXTSeq: Double,
@SerialName("groupOwnerId")
val groupOwnerID: GroupOwnerID,
val groupSquareSwitch: Double,
val hasGroupCustomPortrait: Double,
val inviteRobotMemberExamine: Double,
val inviteRobotMemberSwitch: Double,
val inviteRobotSwitch: Double,
@SerialName("isLimitGroupRtc")
val isLimitGroupRTC: Double,
val lightCharNum: Double,
val luckyWord: String,
@SerialName("luckyWordId")
val luckyWordID: String,
val msgEventSeq: String,
val qqMusicMedalSwitch: Double,
val reserve: Double,
val showPlayTogetherSwitch: Double,
@SerialName("starId")
val starID: Double,
val todoSeq: Double,
val viewedMsgDisappearTime: String
)
@Serializable
data class GroupBindGuildIDS (
@SerialName("guildIds")
val guildIDS: List<String>
)
@Serializable
data class GroupEXTFlameData (
val dayNums: List<String>,
val isDisplayDayNum: Boolean,
val state: Long,
val switchState: Long,
val updateTime: String,
val version: Long
)
@Serializable
data class GroupExcludeGuildIDS (
@SerialName("guildIds")
val guildIDS: List<String>
)
@Serializable
data class GroupOwnerID (
val memberQid: String,
val memberUid: String,
val memberUin: String
)
override fun subtype(): String {
return "get_group_info_ex"
}
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonArray
/**
* GetGroupList事件
* @property data 响应数据
*/
@Serializable
data class GetGroupListEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonArray
) : AbstractGroupEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "get_group_list"
}
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonObject
/**
* GetGroupMemberInfo事件
* @property data 响应数据
*/
@Serializable
data class GetGroupMemberInfoEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonObject
) : AbstractGroupEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "get_group_member_info"
}
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonArray
/**
* GetGroupMemberList事件
* @property data 响应数据
*/
@Serializable
data class GetGroupMemberListEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonArray
) : AbstractGroupEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "get_group_member_list"
}
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonElement
/**
* GetGroupNotice事件
* @property data 响应数据
*/
@Serializable
data class GetGroupNoticeEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonElement? = null,
) : AbstractGroupEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "_get_group_notice"
}
}

View File

@ -0,0 +1,100 @@
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonObject
/**
* GetGroupShutList事件
* @property data 响应数据
*/
@Serializable
data class GetGroupShutListEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: List<Datum>
) : AbstractGroupEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Datum (
val autoRemark: String,
val avatarPath: String,
val bigClubFlag: Double,
val bigClubLevel: Double,
val cardName: String,
@SerialName("cardNameId")
val cardNameID: Double,
val cardType: Double,
val creditLevel: Double,
val globalGroupLevel: Double,
val globalGroupPoint: Double,
val groupHonor: JsonObject,
val isDelete: Boolean,
val isRobot: Boolean,
val isSpecialConcerned: Boolean,
val isSpecialShield: Boolean,
val isSpecialShielded: Boolean,
/**
* 入群时间
*/
val joinTime: Double,
/**
* 最后发言时间
*/
val lastSpeakTime: Double,
val memberFlag: Double,
@SerialName("memberFlagExt")
val memberFlagEXT: Double,
val memberFlagExt2: Double,
val memberLevel: Double,
val memberMobileFlag: Double,
/**
* 群聊等级
*/
val memberRealLevel: Double,
val memberSpecialTitle: String,
@SerialName("memberTitleId")
val memberTitleID: Double,
val mssVipType: Double,
val nick: String,
val qid: String,
val remark: String,
val richFlag: Double,
val role: Double,
/**
* 解禁时间
*/
val shutUpTime: Double,
val specialTitleExpireTime: String,
val uid: String,
val uin: String,
val userShowFlag: Double,
val userShowFlagNew: Double
)
override fun subtype(): String {
return "get_group_shut_list"
}
}

View File

@ -0,0 +1,67 @@
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
/**
* GetGroupSystemMsg事件
* @property data 响应数据
*/
@Serializable
data class GetGroupSystemMsgEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractGroupEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data (
@SerialName("InvitedRequest")
val invitedRequest: List<SystemInfo>,
@SerialName("join_requests")
val joinRequests: List<SystemInfo>
)
/**
* 系统信息
*/
@Serializable
data class SystemInfo (
val actor: Double,
val checked: Boolean,
@SerialName("group_id")
val groupID: Double,
@SerialName("group_name")
val groupName: String,
@SerialName("invitor_nick")
val invitorNick: String,
@SerialName("invitor_uin")
val invitorUin: Double,
val message: String,
@SerialName("request_id")
val requestID: Double,
@SerialName("requester_nick")
val requesterNick: String
)
override fun subtype(): String {
return "get_group_system_msg"
}
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonElement
/**
* SendGroupNotice事件
* @property data 响应数据
*/
@Serializable
data class SendGroupNoticeEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonElement? = null
) : AbstractGroupEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "_send_group_notice"
}
}

View File

@ -0,0 +1,21 @@
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonElement
import top.r3944realms.ltdmanager.napcat.events.NapCatEvent
/**
* SendGroupSign事件
*/
@Serializable
class SendGroupSignEvent: NapCatEvent() {
override fun type(): String {
return "group/" + subtype()
}
override fun subtype(): String {
return "send_group_sign"
}
}

View File

@ -0,0 +1,49 @@
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonObject
/**
* SetEssenceMsg事件
* @property data 响应数据
*/
@Serializable
data class SetEssenceMsgEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: Data
) : AbstractGroupEvent(status0, retcode0, message0, wording0, echo0) {
@Serializable
data class Data (
val errCode: String,
val errMsg: String,
val result: Result
)
@Serializable
data class Result (
val digestTime: Double,
val digestUin: String,
val errorCode: Double,
val msg: JsonObject,
/**
* 正常为空异常有文本提示
*/
val wording: String
)
override fun subtype(): String {
return "set_essence_msg"
}
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonElement
/**
* SetGroupAddOption事件
* @property data 响应数据
*/
@Serializable
data class SetGroupAddOptionEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonElement? = null
) : AbstractGroupEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "set_group_add_option"
}
}

View File

@ -0,0 +1,31 @@
package top.r3944realms.ltdmanager.napcat.events.group
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.json.JsonElement
/**
* SetGroupAddRequest事件
* @property data 响应数据
*/
@Serializable
data class SetGroupAddRequestEvent(
@Transient
val status0: Status = Status.Ok,
@Transient
val retcode0: Double = 0.0,
@Transient
val message0: String = "",
@Transient
val wording0: String = "",
@Transient
val echo0: String? = null,
val data: JsonElement? = null
) : AbstractGroupEvent(status0, retcode0, message0, wording0, echo0) {
override fun subtype(): String {
return "set_group_add_request"
}
}

Some files were not shown because too many files have changed in this diff Show More