• 0 票 - 平均分 0
  • 1
  • 2
  • 3
  • 4
  • 5
[插件] kook-connect
#4
KOOK Connector 常用函数教程

本教程只讲 kook-connector.inc 里的 KCC 函数,不讲 KCMD 指令系统。

一、发送消息到指定频道

先通过频道 ID 找到频道:

代码:
new KCC_Channel:channel = KCC_FindChannelById("你的频道ID");

然后发送消息:

代码:
KCC_SendChannelMessage(channel, "服务器启动完成。");

完整例子:

代码:
stock SendKookServerMessage()
{
    new KCC_Channel:channel = KCC_FindChannelById("你的频道ID");

    KCC_SendChannelMessage(channel, "服务器启动完成。");
    return 1;
}

二、封装一个发送日志函数

代码:
stock KCC_SendServerLog(const msg[])
{
    new KCC_Channel:channel = KCC_FindChannelById("你的频道ID");

    KCC_SendChannelMessage(channel, msg);
    return 1;
}

使用:

代码:
KCC_SendServerLog("管理员执行了一个操作。");

三、发送格式化消息

使用 Pawn 自带的 format:

代码:
stock KCC_SendPlayerJoinLog(playerid)
{
    new name[MAX_PLAYER_NAME + 1];
    new message[128];

    GetPlayerName(playerid, name, sizeof(name));

    format(message, sizeof(message), "玩家 %s 加入了服务器。", name);

    new KCC_Channel:channel = KCC_FindChannelById("你的频道ID");
    KCC_SendChannelMessage(channel, message);

    return 1;
}

四、发送 Embed 卡片消息

创建一个 Embed:

代码:
new KCC_Embed:embed = KCC_CreateEmbed(
    "标题",
    "内容",
    "",
    "",
    0x6495ED,
    "页脚",
    "",
    "",
    ""
);

发送 Embed:

代码:
KCC_SendChannelEmbedMessage(channel, embed);

完整例子:

代码:
stock KCC_SendServerEmbedLog(const title[], const msg[])
{
    new KCC_Channel:channel = KCC_FindChannelById("你的频道ID");

    new KCC_Embed:embed = KCC_CreateEmbed(
        title,
        msg,
        "",
        "",
        0x6495ED,
        "页脚文字",
        "",
        "",
        ""
    );

    KCC_SendChannelEmbedMessage(channel, embed);
    return 1;
}

五、给 Embed 添加字段

代码:
stock KCC_SendServerInfo()
{
    new KCC_Channel:channel = KCC_FindChannelById("你的频道ID");

    new KCC_Embed:embed = KCC_CreateEmbed(
        "服务器信息",
        "服务器当前运行正常。",
        "",
        "",
        0x6495ED,
        "页脚文字",
        "",
        "",
        ""
    );

    KCC_AddEmbedField(embed, "服务器地址", "`127.0.0.1:7777`", true);
    KCC_AddEmbedField(embed, "在线状态", "正常", true);

    KCC_SendChannelEmbedMessage(channel, embed);
    return 1;
}

六、获取频道信息

获取频道 ID:

代码:
new channelId[KCC_ID_SIZE];
KCC_GetChannelId(channel, channelId, sizeof(channelId));

获取频道名称:

代码:
new channelName[64];
KCC_GetChannelName(channel, channelName, sizeof(channelName));

完整例子:

代码:
stock KCC_PrintChannelInfo()
{
    new KCC_Channel:channel = KCC_FindChannelById("你的频道ID");

    new channelId[KCC_ID_SIZE];
    new channelName[64];

    KCC_GetChannelId(channel, channelId, sizeof(channelId));
    KCC_GetChannelName(channel, channelName, sizeof(channelName));

    printf("[KOOK] Channel: %s (%s)", channelName, channelId);
    return 1;
}

七、获取用户信息

如果你在 KOOK 消息回调里拿到了 user,可以这样获取用户名:

代码:
new username[KCC_USERNAME_SIZE];
KCC_GetUserName(user, username, sizeof(username));

获取用户 ID:

代码:
new userId[KCC_ID_SIZE];
KCC_GetUserId(user, userId, sizeof(userId));

八、接收 KOOK 消息

kook-connector.inc 提供消息创建回调:

代码:
public KCC_OnMessageCreate(KCC_Message:message)
{
    new content[256];
    new reply[300];
    new username[KCC_USERNAME_SIZE];
    new KCC_User:user;
    new KCC_Channel:channel;

    KCC_GetMessageContent(message, content, sizeof(content));
    KCC_GetMessageAuthor(message, user);
    KCC_GetMessageChannel(message, channel);
    KCC_GetUserName(user, username, sizeof(username));

    format(reply, sizeof(reply), "%s 发送了: %s", username, content);
    KCC_SendChannelMessage(channel, reply);

    return 1;
}

注意:
如果项目已经使用 kook-cmd.inc,它也会 hook KCC_OnMessageCreate。多个系统同时使用这个回调时,需要注意 hook 顺序。

九、删除 KOOK 消息

如果在回调里拿到了 message,可以删除这条 KOOK 消息:

代码:
KCC_DeleteMessage(message);

示例:

代码:
public KCC_OnMessageCreate(KCC_Message:message)
{
    new content[256];
    KCC_GetMessageContent(message, content, sizeof(content));

    if(!strcmp(content, "delete", true))
    {
        KCC_DeleteMessage(message);
    }

    return 1;
}

十、编辑消息

如果你拿到了 KCC_Message,可以编辑它:

代码:
KCC_EditMessage(message, "新的消息内容");

十一、查找用户

通过 KOOK 用户 ID 查找用户:

代码:
new KCC_User:user = KCC_FindUserById("用户ID");

通过用户名查找用户:

代码:
new KCC_User:user = KCC_FindUserByName("用户名", "0000");

十二、查找服务器

通过服务器 ID:

代码:
new KCC_Guild:guild = KCC_FindGuildById("服务器ID");

通过服务器名称:

代码:
new KCC_Guild:guild = KCC_FindGuildByName("服务器名称");

十三、获取服务器信息

代码:
stock KCC_PrintGuildInfo()
{
    new KCC_Guild:guild = KCC_FindGuildById("服务器ID");

    new guildId[KCC_ID_SIZE];
    new guildName[64];

    KCC_GetGuildId(guild, guildId, sizeof(guildId));
    KCC_GetGuildName(guild, guildName, sizeof(guildName));

    printf("[KOOK] Guild: %s (%s)", guildName, guildId);
    return 1;
}

十四、常用函数总结

发送频道消息:

代码:
KCC_SendChannelMessage(channel, "内容");

查找频道:

代码:
KCC_FindChannelById("频道ID");

创建 Embed:

代码:
KCC_CreateEmbed("标题", "内容", "", "", 0x6495ED, "页脚", "", "", "");

发送 Embed:

代码:
KCC_SendChannelEmbedMessage(channel, embed);

添加 Embed 字段:

代码:
KCC_AddEmbedField(embed, "名称", "内容", true);

获取频道名称:

代码:
KCC_GetChannelName(channel, name, sizeof(name));

获取用户名称:

代码:
KCC_GetUserName(user, name, sizeof(name));

获取消息内容:

代码:
KCC_GetMessageContent(message, content, sizeof(content));

获取消息作者:

代码:
KCC_GetMessageAuthor(message, user);

获取消息频道:

代码:
KCC_GetMessageChannel(message, channel);
  回复


此主题中的消息
[插件] kook-connect - 由 siwode - 05-01-2026, 01:07 AM
RE: [插件] kook-connect - 由 siwode - 06-08-2026, 10:47 AM
RE: [插件] kook-connect - 由 siwode - 06-08-2026, 10:49 AM
RE: [插件] kook-connect - 由 siwode - 06-08-2026, 10:55 AM
RE: [插件] kook-connect - 由 siwode - 06-08-2026, 11:04 AM

论坛跳转:


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