• 0 票 - 平均分 0
  • 1
  • 2
  • 3
  • 4
  • 5
[插件] kook-connect
#1
samp-kook-connector 插件 Wiki

将 Kook 机器人集成到你的 SA-MP / open.mp 服务器游戏模式中。



目录

  1. 安装
  2. 重要说明
  3. Natives(原生函数)
  4. Callbacks(回调函数)



1. 安装

1.1 创建 Kook 机器人

  1. 访问 https://developer.kookapp.cn/
  2. 创建一个新的应用 / 机器人
  3. 输入机器人名称并完成创建
  4. 从机器人设置页面获取你的 机器人令牌(Bot Token)
  5. 通过开发者门户或邀请链接,将机器人邀请到你的服务器

1.2 配置令牌

SA-MP(server.cfg):
代码:
kook_bot_token YOUR_BOT_TOKEN_HERE

open.mp(config.json):
代码:
kook.bot_token YOUR_BOT_TOKEN_HERE

也可以使用环境变量代替:
代码:
SAMP_KOOK_BOT_TOKEN=YOUR_BOT_TOKEN_HERE

引用:注意事项:
  • 永远不要将机器人令牌分享给任何人
  • 确保服务器时钟定期同步,否则速率限制器将无法正常工作,机器人可能会被封禁
  • 此插件专为 open.mp (OMP) 服务器设计



2. 重要说明

引用:关于 Kook ID 与内部 ID:
Kook ID 是一个很大的数字,无法放入 PAWN 的 32 位整数中。因此插件采用两套 ID 体系:
  • Kook ID:Kook 平台使用的真实 ID,必须以字符串形式传递
  • 内部 ID:插件内部使用的整数索引,通过 KCC_Find* / KCC_Get* 系列函数获取

你的脚本只需持有内部 ID(索引),插件会在内部维护与真实 ID 的映射关系。

引用:关于发送私信:
向用户发送私信需要两步:
  1. 调用 KCC_CreatePrivateChannel(user, "回调函数名") 打开私信频道
  2. 在回调函数中调用 KCC_GetCreatedPrivateChannel() 获取频道 ID
  3. 使用该频道 ID 调用 KCC_SendChannelMessage 等频道函数发送消息



3. Natives(原生函数)

3.1 频道

KOOK_FindChannelById
代码:
KOOK_FindChannelById(const channel_id[])
通过 Kook ID 查找频道,返回带 KCC_Channel 标签的内部 ID。

KCC_GetChannelId
代码:
KCC_GetChannelId(KCC_Channel:channel, dest[DCC_ID_SIZE], max_size = sizeof dest)
获取频道的 Kook ID,以文本形式存入 dest

KCC_GetChannelType
代码:
KCC_GetChannelType(KCC_Channel:channel, &KCC_ChannelType:type)
获取频道类型,存入 type

KCC_GetChannelGuild
代码:
KCC_GetChannelGuild(KCC_Channel:channel, &KCC_Guild:guild)
获取频道所属服务器,存入 guild

KCC_GetChannelName
代码:
KCC_GetChannelName(KCC_Channel:channel, dest[], max_size = sizeof dest)
获取频道名称,存入 dest

KCC_GetChannelTopic
代码:
KCC_GetChannelTopic(KCC_Channel:channel, dest[], max_size = sizeof dest)
获取频道主题,存入 dest

KCC_GetChannelPosition
代码:
KCC_GetChannelPosition(KCC_Channel:channel, &position)
获取频道排列位置,存入 position

KCC_SendChannelMessage
代码:
KCC_SendChannelMessage(KCC_Channel:channel, const message[], const callback[] = "", const format[] = "", {Float, _}:...)
向指定频道发送消息。callback(可选)为消息发送确认后调用的公共函数,format 及后续参数为回调参数。

KCC_SetChannelName
代码:
KCC_SetChannelName(KCC_Channel:channel, const name[])
修改频道名称。

KCC_SetChannelTopic
代码:
KCC_SetChannelTopic(KCC_Channel:channel, const topic[])
修改频道主题。

KCC_DeleteChannel
代码:
KCC_DeleteChannel(KCC_Channel:channel)
删除指定频道。



3.2 消息

KCC_GetMessageId
代码:
KCC_GetMessageId(KCC_Message:message, dest[KCC_ID_SIZE], max_size = KCC_ID_SIZE)
获取消息的 Kook ID,存入 dest

KCC_GetMessageChannel
代码:
KCC_GetMessageChannel(KCC_Message:message, &KCC_Channel:channel)
获取消息所在频道,存入 channel

KCC_GetMessageAuthor
代码:
KCC_GetMessageAuthor(KCC_Message:message, &KCC_User:author)
获取消息发送者,存入 author

KCC_GetMessageContent
代码:
KCC_GetMessageContent(KCC_Message:message, dest[], max_size = sizeof dest)
获取消息文本内容,存入 dest

KCC_IsMessageMentioningEveryone
代码:
KCC_IsMessageMentioningEveryone(KCC_Message:message, &bool:mentions_everyone)
检查消息是否 @全体成员。

KCC_GetMessageUserMentionCount
代码:
KCC_GetMessageUserMentionCount(KCC_Message:message, &mentioned_user_count)
获取消息中提及的用户数量。

KCC_GetMessageUserMention
代码:
KCC_GetMessageUserMention(KCC_Message:message, offset, &KCC_User:mentioned_user)
按索引获取消息中提及的某个用户。

KCC_GetMessageRoleMentionCount
代码:
KCC_GetMessageRoleMentionCount(KCC_Message:message, &mentioned_role_count)
获取消息中提及的身份组数量。

KCC_GetMessageRoleMention
代码:
KCC_GetMessageRoleMention(KCC_Message:message, offset, &KCC_Role:mentioned_role)
按索引获取消息中提及的某个身份组。

KCC_DeleteMessage
代码:
KCC_DeleteMessage(KCC_Message:message)
在 Kook 上删除该消息。

KCC_GetCreatedMessage
代码:
KCC_GetCreatedMessage()
KCC_SendChannelMessage 的回调中使用,返回刚发送的消息的内部 ID(带 KCC_Message 标签)。

KCC_DeleteInternalMessage
代码:
KCC_DeleteInternalMessage(KCC_Message:message)
从插件内部存储中移除该消息(不会在 Kook 上删除消息),用于持久化消息的清理。

KCC_EditMessage
代码:
KCC_EditMessage(KCC_Message:message, const content[], KCC_Embed:embed = KCC_Embed:0)
编辑消息内容,可选附带嵌入消息。

KCC_SetMessagePersistent
代码:
KCC_SetMessagePersistent(KCC_Message:message, bool:persistent)
设置消息是否持久保存在插件内部存储中。

KCC_CacheChannelMessage
代码:
KCC_CacheChannelMessage(const channel_id[DCC_ID_SIZE], const message_id[DCC_ID_SIZE], const callback[] = "", const format[] = "", {Float, _}:...)
通过 Kook ID 将指定消息缓存到插件中,缓存完成后调用 callback



3.3 用户

引用:用户的 discriminator 是附加在 Kook 用户名后的 4 位数字标识。

KCC_FindUserByName
代码:
KCC_FindUserByName(const user_name[], const user_discriminator[])
通过用户名 + discriminator 查找用户,返回带 KCC_User 标签的内部 ID。

KCC_FindUserById
代码:
KCC_FindUserById(const user_id[])
通过 Kook ID 查找用户,返回带 KCC_User 标签的内部 ID。

KCC_GetUserId
代码:
KCC_GetUserId(KCC_User:user, dest[DCC_ID_SIZE], max_size = DCC_ID_SIZE)
获取用户的 Kook ID,存入 dest

KCC_GetUserName
代码:
KCC_GetUserName(KCC_User:user, dest[DCC_USERNAME_SIZE], max_size = sizeof dest)
获取用户名,存入 dest

KCC_GetUserDiscriminator
代码:
KCC_GetUserDiscriminator(KCC_User:user, dest[], max_size = DCC_ID_SIZE)
获取用户的 discriminator,存入 dest

KCC_IsUserBot
代码:
KCC_IsUserBot(KCC_User:user, &bool:is_bot)
检查用户是否为机器人。

KCC_IsUserVerified
代码:
KCC_IsUserVerified(KCC_User:user, &bool:is_verified)
检查用户是否已完成验证。



3.4 身份组

引用:dest 字符串大小必须为 DCC_ID_SIZE。

KCC_FindRoleByName
代码:
KCC_FindRoleByName(KCC_Guild:guild, const role_name[])
在指定服务器中按名称查找身份组,返回带 KCC_Role 标签的内部 ID。

KCC_FindRoleById
代码:
KCC_FindRoleById(const role_id[])
通过 Kook ID 查找身份组,返回带 KCC_Role 标签的内部 ID。

KCC_GetRoleId
代码:
KCC_GetRoleId(KCC_Role:role, dest[DCC_ID_SIZE], max_size = sizeof dest)
获取身份组的 Kook ID,存入 dest

KCC_GetRoleName
代码:
KCC_GetRoleName(KCC_Role:role, dest[], max_size = sizeof dest)
获取身份组名称,存入 dest

KCC_GetRoleColor
代码:
KCC_GetRoleColor(KCC_Role:role, &color)
获取身份组颜色值,存入 color

KCC_GetRolePermissions
代码:
KCC_GetRolePermissions(KCC_Role:role, &perm_high, &perm_low)
获取身份组权限(64 位整数分为高低两个 32 位部分)。

KCC_IsRoleHoist
代码:
KCC_IsRoleHoist(KCC_Role:role, &bool:is_hoist)
检查身份组是否在成员列表中单独显示(提升显示)。

KCC_GetRolePosition
代码:
KCC_GetRolePosition(KCC_Role:role, &position)
获取身份组的排列位置,存入 position

KCC_IsRoleMentionable
代码:
KCC_IsRoleMentionable(KCC_Role:role, &bool:is_mentionable)
检查身份组是否可被 @ 提及。



3.5 服务器

引用:dest 字符串大小必须为 DCC_ID_SIZE。

— 查询 —

KCC_FindGuildByName
代码:
KCC_FindGuildByName(const guild_name[])
按名称查找服务器,返回带 KCC_Guild 标签的内部 ID。

KCC_FindGuildById
代码:
KCC_FindGuildById(const guild_id[])
通过 Kook ID 查找服务器,返回带 KCC_Guild 标签的内部 ID。

KCC_GetGuildId
代码:
KCC_GetGuildId(KCC_Guild:guild, dest[DCC_ID_SIZE], max_size = sizeof dest)
获取服务器的 Kook ID,存入 dest

KCC_GetGuildName
代码:
KCC_GetGuildName(KCC_Guild:guild, dest[], max_size = sizeof dest)
获取服务器名称,存入 dest

KCC_GetGuildOwnerId
代码:
KCC_GetGuildOwnerId(KCC_Guild:guild, dest[DCC_ID_SIZE], max_size = sizeof dest)
获取服务器所有者的 Kook 用户 ID,存入 dest

KCC_GetAllGuilds
代码:
KCC_GetAllGuilds(KCC_Guild:dest[], max_size = sizeof dest)
获取所有服务器的内部 ID,存入 dest 数组。

— 频道 —

KCC_GetGuildChannel
代码:
KCC_GetGuildChannel(KCC_Guild:guild, offset, &KCC_Channel:channel)
按索引获取服务器中的某个频道。

KCC_GetGuildChannelCount
代码:
KCC_GetGuildChannelCount(KCC_Guild:guild, &count)
获取服务器的频道总数。

KCC_CreateGuildChannel
代码:
KCC_CreateGuildChannel(KCC_Guild:guild, const name[], DCC_ChannelType:type, const callback[] = "", const format[] = "", {Float, _}:...)
在服务器中创建新频道,完成后调用 callback

KCC_GetCreatedGuildChannel
代码:
KCC_GetCreatedGuildChannel()
KCC_CreateGuildChannel 的回调中使用,返回新创建频道的内部 ID。

— 成员 —

KCC_GetGuildMember
代码:
KCC_GetGuildMember(KCC_Guild:guild, offset, &KCC_User:user)
按索引获取服务器中的某个成员。

KCC_GetGuildMemberCount
代码:
KCC_GetGuildMemberCount(KCC_Guild:guild, &count)
获取服务器成员总数。

KCC_GetGuildMemberVoiceChannel
代码:
KCC_GetGuildMemberVoiceChannel(KCC_Guild:guild, KCC_User:user, &KCC_Channel:channel)
获取成员当前所在的语音频道。

KCC_GetGuildMemberNickname
代码:
KCC_GetGuildMemberNickname(KCC_Guild:guild, KCC_User:user, dest[DCC_NICKNAME_SIZE], max_size = sizeof dest)
获取成员在服务器中的昵称。

KCC_GetGuildMemberRole
代码:
KCC_GetGuildMemberRole(KCC_Guild:guild, KCC_User:user, offset, &KCC_Role:role)
按索引获取成员拥有的某个身份组。

KCC_GetGuildMemberRoleCount
代码:
KCC_GetGuildMemberRoleCount(KCC_Guild:guild, KCC_User:user, &count)
获取成员拥有的身份组数量。

KCC_HasGuildMemberRole
代码:
KCC_HasGuildMemberRole(KCC_Guild:guild, KCC_User:user, KCC_Role:role, &bool:has_role)
检查成员是否拥有指定身份组。

KCC_SetGuildMemberNickname
代码:
KCC_SetGuildMemberNickname(KCC_Guild:guild, KCC_User:user, const nickname[])
修改成员昵称。

KCC_AddGuildMemberRole
代码:
KCC_AddGuildMemberRole(KCC_Guild:guild, KCC_User:user, KCC_Role:role)
为成员添加身份组。

KCC_RemoveGuildMemberRole
代码:
KCC_RemoveGuildMemberRole(KCC_Guild:guild, KCC_User:user, KCC_Role:role)
移除成员的某个身份组。

KCC_RemoveGuildMember
代码:
KCC_RemoveGuildMember(KCC_Guild:guild, KCC_User:user)
踢出服务器成员。

KCC_CreateGuildMemberBan
代码:
KCC_CreateGuildMemberBan(KCC_Guild:guild, KCC_User:user, const reason[] = "")
封禁成员,可附带原因。

KCC_RemoveGuildMemberBan
代码:
KCC_RemoveGuildMemberBan(KCC_Guild:guild, KCC_User:user)
解封成员。

— 身份组管理 —

KCC_GetGuildRole
代码:
KCC_GetGuildRole(KCC_Guild:guild, offset, &KCC_Role:role)
按索引获取服务器中的某个身份组。

KCC_GetGuildRoleCount
代码:
KCC_GetGuildRoleCount(KCC_Guild:guild, &count)
获取服务器的身份组总数。

KCC_CreateGuildRole
代码:
KCC_CreateGuildRole(KCC_Guild:guild, const name[], const callback[] = "", const format[] = "", {Float, _}:...)
在服务器中创建新身份组,完成后调用 callback

KCC_GetCreatedGuildRole
代码:
KCC_GetCreatedGuildRole()
KCC_CreateGuildRole 的回调中使用,返回新创建身份组的内部 ID。

KCC_DeleteGuildRole
代码:
KCC_DeleteGuildRole(KCC_Guild:guild, KCC_Role:role)
删除服务器中的身份组。

KCC_SetGuildRoleName
代码:
KCC_SetGuildRoleName(KCC_Guild:guild, KCC_Role:role, const name[])
修改身份组名称。

KCC_SetGuildRolePermissions
代码:
KCC_SetGuildRolePermissions(KCC_Guild:guild, KCC_Role:role, perm_high, perm_low)
修改身份组权限(64 位整数分为高低两个 32 位部分)。

KCC_SetGuildRoleColor
代码:
KCC_SetGuildRoleColor(KCC_Guild:guild, KCC_Role:role, color)
修改身份组颜色。

KCC_SetGuildRoleHoist
代码:
KCC_SetGuildRoleHoist(KCC_Guild:guild, KCC_Role:role, bool:hoist)
设置身份组是否在成员列表中单独显示。

KCC_SetGuildRoleMentionable
代码:
KCC_SetGuildRoleMentionable(KCC_Guild:guild, KCC_Role:role, bool:mentionable)
设置身份组是否可被 @ 提及。



3.6 机器人

KCC_CreatePrivateChannel
代码:
KCC_CreatePrivateChannel(KCC_User:user, const callback[], const format[] = "", {Float, _}:...)
向指定用户打开私信频道,完成后调用 callback

KCC_GetCreatedPrivateChannel
代码:
KCC_GetCreatedPrivateChannel()
KCC_CreatePrivateChannel 的回调中使用,返回私信频道的内部 ID(可直接用于 KCC_SendChannelMessage 等函数)。



3.7 嵌入消息

嵌入消息(Embed)允许向 Kook 频道发送富文本内容消息。

KCC_CreateEmbed
代码:
KCC_CreateEmbed(const title[] = "", const description[] = "", const url[] = "", const timestamp[] = "", color = 0, const footer_text[] = "", const footer_icon_url[] = "", const thumbnail_url[] = "", const image_url[] = "")
创建一个嵌入消息,所有参数均为可选,返回带 KCC_Embed 标签的内部 ID。

KCC_DeleteEmbed
代码:
KCC_DeleteEmbed(KCC_Embed:embed)
删除嵌入消息。

KCC_SendChannelEmbedMessage
代码:
KCC_SendChannelEmbedMessage(KCC_Channel:channel, KCC_Embed:embed, const message[] = "", const callback[] = "", const format[] = "", {Float, _}:...)
向频道发送带嵌入消息的内容,可附带普通文字。

KCC_AddEmbedField
代码:
KCC_AddEmbedField(KCC_Embed:embed, const name[], const value[], bool:inline = false)
为嵌入消息添加字段,inlinetrue 时字段并排显示。

KCC_SetEmbedTitle
代码:
KCC_SetEmbedTitle(KCC_Embed:embed, const title[])
设置嵌入消息标题。

KCC_SetEmbedDescription
代码:
KCC_SetEmbedDescription(KCC_Embed:embed, const description[])
设置嵌入消息描述。

KCC_SetEmbedUrl
代码:
KCC_SetEmbedUrl(KCC_Embed:embed, const url[])
设置嵌入消息链接。

KCC_SetEmbedTimestamp
代码:
KCC_SetEmbedTimestamp(KCC_Embed:embed, const timestamp[])
设置嵌入消息时间戳。

KCC_SetEmbedColor
代码:
KCC_SetEmbedColor(KCC_Embed:embed, color)
设置嵌入消息左侧色条颜色。

KCC_SetEmbedFooter
代码:
KCC_SetEmbedFooter(KCC_Embed:embed, const footer_text[], const footer_icon_url[] = "")
设置嵌入消息页脚文本,可附带图标 URL。

KCC_SetEmbedThumbnail
代码:
KCC_SetEmbedThumbnail(KCC_Embed:embed, const thumbnail_url[])
设置嵌入消息缩略图。

KCC_SetEmbedImage
代码:
KCC_SetEmbedImage(KCC_Embed:embed, const image_url[])
设置嵌入消息主图片。



3.8 表情

引用:dest 字符串大小必须为 DCC_EMOJI_NAME_SIZE

KCC_CreateEmoji
代码:
KCC_CreateEmoji(const name[DCC_EMOJI_NAME_SIZE], const snowflake[DCC_ID_SIZE] = "")
创建一个表情对象,snowflake 为可选的 Kook 雪花 ID,返回带 KCC_Emoji 标签的内部 ID。

KCC_DeleteEmoji
代码:
KCC_DeleteEmoji(KCC_Emoji:emoji)
删除表情对象。

KCC_GetEmojiName
代码:
KCC_GetEmojiName(KCC_Emoji:emoji, dest[DCC_EMOJI_NAME_SIZE], maxlen = DCC_EMOJI_NAME_SIZE)
获取表情名称,存入 dest



3.9 反应

KCC_CreateReaction
代码:
KCC_CreateReaction(KCC_Message:message, KCC_Emoji:reaction_emoji)
对指定消息添加表情反应。

KCC_DeleteMessageReaction
代码:
KCC_DeleteMessageReaction(KCC_Message:message, KCC_Emoji:reaction_emoji = KCC_Emoji:0)
移除消息上的表情反应。reaction_emoji 为 0(默认)时删除该消息上的所有反应。



3.10 其他

KCC_EscapeMarkdown
代码:
KCC_EscapeMarkdown(const src[], dest[], max_size = sizeof dest)
对字符串中的 Markdown 特殊字符进行转义,使文本在 Kook 消息中原样显示,不被格式化。



4. Callbacks(回调函数)

4.1 频道回调

KCC_OnChannelCreate
代码:
public KCC_OnChannelCreate(KCC_Channel:channel)
触发时机:服务器中有新频道创建时。

KCC_OnChannelUpdate
代码:
public KCC_OnChannelUpdate(KCC_Channel:channel)
触发时机:频道信息更新时(名称、权限等)。

KCC_OnChannelDelete
代码:
public KCC_OnChannelDelete(KCC_Channel:channel)
触发时机:频道被删除时。



4.2 消息回调

KCC_OnMessageCreate
代码:
public KCC_OnMessageCreate(KCC_Message:message)
触发时机:频道中有新消息发送时。

KCC_OnMessageDelete
代码:
public KCC_OnMessageDelete(KCC_Message:message)
触发时机:消息被删除时。

KCC_OnMessageReaction
代码:
public KCC_OnMessageReaction(KCC_Message:message, KCC_User:reaction_user, KCC_Emoji:emoji, DCC_MessageReactionType:reaction_type)
触发时机:消息添加或移除表情反应时。
  • message:消息内部 ID
  • reaction_user:操作反应的用户内部 ID
  • emoji:使用的表情内部 ID
  • reaction_type:反应事件类型(添加 / 移除等)



4.3 用户回调

KCC_OnUserUpdate
代码:
public KCC_OnUserUpdate(KCC_User:user)
触发时机:用户资料更新时(用户名、头像等)。



4.4 服务器回调

KCC_OnGuildCreate
代码:
public KCC_OnGuildCreate(KCC_Guild:guild)
触发时机:服务器创建,或机器人加入新服务器时。

KCC_OnGuildUpdate
代码:
public KCC_OnGuildUpdate(KCC_Guild:guild)
触发时机:服务器信息更新时(名称、图标等)。

KCC_OnGuildDelete
代码:
public KCC_OnGuildDelete(KCC_Guild:guild)
触发时机:服务器删除,或机器人离开服务器时。

KCC_OnGuildMemberAdd
代码:
public KCC_OnGuildMemberAdd(KCC_Guild:guild, KCC_User:user)
触发时机:用户加入服务器时。

KCC_OnGuildMemberUpdate
代码:
public KCC_OnGuildMemberUpdate(KCC_Guild:guild, KCC_User:user)
触发时机:成员信息更新时(昵称、身份组等)。

KCC_OnGuildMemberVoiceUpdate
代码:
public KCC_OnGuildMemberVoiceUpdate(KCC_Guild:guild, KCC_User:user, KCC_Channel:channel)
触发时机:成员语音状态变化时(加入 / 离开语音频道)。
  • channel:语音频道内部 ID,用户离开语音时该值可能无效

KCC_OnGuildMemberRemove
代码:
public KCC_OnGuildMemberRemove(KCC_Guild:guild, KCC_User:user)
触发时机:用户离开或被踢出服务器时。

KCC_OnGuildRoleCreate
代码:
public KCC_OnGuildRoleCreate(KCC_Guild:guild, KCC_Role:role)
触发时机:服务器中创建新身份组时。

KCC_OnGuildRoleUpdate
代码:
public KCC_OnGuildRoleUpdate(KCC_Guild:guild, KCC_Role:role)
触发时机:服务器身份组更新时(名称、颜色、权限等)。

KCC_OnGuildRoleDelete
代码:
public KCC_OnGuildRoleDelete(KCC_Guild:guild, KCC_Role:role)
触发时机:服务器身份组被删除时。
  回复


论坛跳转:


浏览此主题的用户: 1 位客人