“JavaScript 运行时函数无效”,“key”:“afterUpdateAccount”

“JavaScript runtime function invalid.”,”key”:”afterUpdateAccount”

提问人:Claud 提问时间:7/29/2023 最后编辑:James ZClaud 更新时间:7/29/2023 访问量:33

问:

我尝试在用户更新后添加 Metdata。但是,在main.ts中添加函数并转到 ApiExplorer UpdateAccount 后,它没有运行我的函数。在我的日志中显示以下错误:

template_nk_backend |{“level”:“error”,“ts”:“2023-07-29T05:59:14.888Z”,“caller”:“server/runtime_javascript.go:477”,“msg”:“JavaScript 运行时函数无效”,“key”:“afterUpdateAccount”}

不知道是什么原因导致了问题。我是 nakama 的新手。

这是我main.ts:

 function InitModule(
    ctx: nkruntime.Context,
    logger: nkruntime.Logger,
    nk: nkruntime.Nakama,
    initializer: nkruntime.Initializer
  ) {
    let afterUpdateAccount: nkruntime.AfterHookFunction<
      void,
      nkruntime.UserUpdateAccount
    > = function (
      ctx: nkruntime.Context,
      logger: nkruntime.Logger,
      nk: nkruntime.Nakama
    ): nkruntime.UserUpdateAccount {
      // Check the group name does not contain profanity (containsProfanity implementation not provided)
      logger.info("afterUpdateAccount hook called.");
  
      let user_id = ctx.userId;
      try {
        const account = nk.accountGetId(user_id);
        let metadata = account.user.metadata || {};
  
        metadata.gameResult = "won";
  
        // Convert the metadata to a JSON string
        const metadataString = JSON.stringify(metadata);
  
        // Update the user's metadata using the JSON string
        nk.accountUpdateId(user_id, metadataString);
  
        // Return a dummy UserUpdateAccount object
        return {
          userId: user_id,
          username: "please",
          displayName: "please2",
          timezone: "",
          location: "",
          langTag: "",
          avatarUrl: "please3",
          metadata: { metadataString },
        };
      } catch (error) {
        // Handle the error as appropriate.
        logger.error("Error updating user account metadata:", error);
  
        // Return a dummy UserUpdateAccount object in case of an error
        return {
          userId: "",
          username: "",
          displayName: "",
          timezone: "",
          location: "",
          langTag: "",
          avatarUrl: "",
          metadata: {},
        };
      }
    };
  
    // Register the afterUpdateAccount hook
    initializer.registerAfterUpdateAccount(afterUpdateAccount);
  
    // Define the rpcCreateNewAccount function
    function rpcCreateNewAccount(
      ctx: nkruntime.Context,
      logger: nkruntime.Logger,
      nk: nkruntime.Nakama,
      payload: any
    ): any {
      // Your rpcCreateNewAccount function implementation here...
    }
  
    // Register the rpcCreateNewAccount function
    initializer.registerRpc("updateaccount", rpcCreateNewAccount);
  
    logger.info("JavaScript logic loaded.");
  }
TypeScript 服务器端 RPC Nakama

评论


答: 暂无答案