API: 채팅

이 페이지는 채팅 기능과 관련된 Roll20 API에 대한 세부 정보를 제공합니다.


채팅 이벤트

chat:message

새로운 채팅 메시지가 수신되면 트리거됩니다. 메시지의 유형이 "롤결과" 또는 "gmrollresult"인 경우, 롤 결과에 대한 정보가 포함된 객체를 가져오려면 메시지 내용에 대해JSON.parse() 을 호출해야 합니다.

참고: 플레이어가 느낌표(!)로 시작하는 채팅 메시지를 입력하면 해당 메시지의 유형은 "api"가 되어 아무에게도 표시되지 않습니다. 이 기능을 사용하여 Mod (API) 스크립트가 응답하는 명령을 제공할 수 있도록 의도되었습니다. 따라서 메시지가 "api" 유형인 경우 아무도 표시되지 않았으며, 대화 메시지를 보낸 플레이어는 아마도 Mod (API) 스크립트가 메시지 결과로 뭔가를 수행하기를 기대하고 있습니다.

콜백 매개변수:

속성 기본값 노트
누구 "" 메시지를 보낸 플레이어 또는 캐릭터의 표시 이름
playerid   메시지를 보낸 플레이어의 ID
유형 "일반" "일반", "rollresult", "gmrollresult", "emote", "whisper", "desc", 또는 "api" 중 하나
내용 "" 채팅 메시지의 내용입니다. 만약타입이 "rollresult" 이라면, 이것은 롤에 대한 데이터를 포함한 JSON 문자열입니다.
origRoll   (타입 "rollresult" 또는 "gmrollresult" 만 해당)롤의 원본 텍스트입니다. 예: 플레이어가 "/r 2d10+5 fire damage" 를 입력했을 때 "2d10+5 fire damage"입니다. 이것은 "rollresult" 또는 "gmrollresult" 이외의 타입을 가진 메시지에 대해서는content의 사용과 동일합니다.
inlinerolls   (content 에 하나 이상의 인라인 롤만 포함)메시지에 있는 모든 인라인 롤에 대한 정보를 포함하는 객체 배열입니다.
롤템플릿   (콘텐츠에 롤템플릿 하나 이상만 포함) 지정된 템플릿의 이름입니다.
대상   ("whisper" 유형만) 귓속말을 받는 사람의 플레이어 ID입니다. GM에게 귓속말을 보낼 때 GM의 디스플레이 이름을 사용하지 않고 보낼 경우 (예: Riley가 GM 일 때 "/w gm text" 대신 "/w Riley text"를 사용하지 않은 경우) 또는 제어하는 플레이어가 없는 캐릭터에게 귓속말을 보낼 경우 값은 "gm"이 됩니다.
target_name   ("whisper" 유형만) 귓속말을 받은 플레이어 또는 캐릭터의 디스플레이 이름입니다.
selected   (형식 "api" 만)사용자가 명령을 입력할 때 선택한 객체의 배열입니다.

참고:이 정보는 모두 필요하지 않을 수 있습니다. 대부분의 경우 굴림의 전체 결과에만 관심이 있을 것입니다 (첫 번째 예제의 하단 참조). 하지만, 굴림 결과를 심층적으로 파고들고 싶다면 모든 정보가 제공됩니다.

 


굴림 결과 구조 예시 1

"rollresult" 또는 "gmrollresult" 메시지의content속성에서JSON.parse를 호출하면 다음 형식의 객체를 얻을 수 있습니다(/roll {2d6}+5+1t[weather] Attack!명령의 결과입니다)).

{
  "type":"V", //"V" = "유효성 검사된 롤"(지금은 항상 "V"입니다)
  "롤": [
    {
      "type":"G", //"G"는 그룹화된 롤을 나타냅니다. 그룹은 하나의 롤 안에 있는 일련의 '하위 롤'과 같습니다.
      "롤": [
        [
          {
            "type":"R", //"R" = "Roll"
            "dice":2, // 주사위 굴린 수 (2dX는 주사위 2개)
            "sides":6, //주사위의 면 수 (Xd6는 6면)
            "mods":{},
            "results": [ //각 주사위의 결과 배열.
             {
               "v":1 // 첫 번째 2d6
             },
             {
               "v":5 //두 번째 2d6
             } }
            ]
          }
        ]
      ],
      "mods":{},
      "resultType":"sum", //결과는 (성공 체크가 아닌) 합계입니다
      "results": [
        {
          "v":6 // 이 경우, 그룹의 전체 결과(합계)입니다.
        }
      ]
    },
    {
      "type":"M", //"M" = 수학 식
      "expr":"+5+"
    },
    {
      "type":"R", //"R" = 주사위 굴리기
      "dice":1,
      "table":"weather", //이 주사위가 테이블에 대해 만들어진 경우 사용된 테이블의 이름으로 테이블 속성이 설정됩니다
      "mods":{},
      "sides":2, //테이블 롤의 경우 그냥 무시해도 됩니다.
      "results": [
        {
          "v":0, //롤업된 테이블 항목의 "값". 텍스트 테이블의 경우 이 값은 항상 0입니다.
          "tableidx":1, //테이블에서 롤된 아이템의 인덱스입니다.
          "tableItem": { //테이블이 롤될 때의 테이블 아이템 객체의 사본입니다.
            "name":"비오는", 
            "avatar":"", //만약 롤 가능한 테이블이 이미지 아이콘을 사용한다면, 이미지의 URL입니다.
            "weight":1,
            "id":"-IpzPx2j_9piP09ceyOv"
          }
        }
      ]
    },
    {
      "type":"C", // "C" = Comment
      "text":" 공격!"
    }
  ],
  "resultType":"sum", //전체 롤의 전체 결과 유형
  "total":11 //전체 롤의 전체 총합 (모든 하위 그룹 포함)
}

롤 결과 구조 예시 2

주사위 던지기 결과에 대한 주석이 달린 구조입니다./roll {1d6!!>5}>6 (폭발 수정과 목표 성공을 보여줌):

{
  "type":"V",
  "rolls": [
    {
      "type":"G",
      "rolls": [
        [
          {
            "type":"R",
            "dice":1,
            "sides":6,
            "mods": { //롤 수정
              "컴파운딩": { //"compounding" = "컴파운딩 폭발 (!!)"
                "comp":">=", //Comparison type
                "point":5 //Comparison point
              }
            },
            "results": [
              {
                "v":13 //전체 주사위 결과. 복리가 폭발하는 방식이므로 주사위 결과는 하나뿐이라는 점에 유의하세요.
              
            ]
          }
        ]
      ],
      "mods": {
        "success": {
          "comp":">=",
          "point":6
        }
      },
      "resultType":"sum",
      "results": [
        {
          "v":13
        }
      ]
    }
  ],
  "resultType":"success", // In this case, the result is a count of successes
  "total":1 //Total number of successes
}

Chat Event Example (Implementing Custom Roll Type)

on("chat:message", function(msg) {
  //This allows players to enter !sr <number> to roll a number of d6 dice with a target of 4.
  if(msg.type == "api" && msg.content.indexOf("!sr ") !== -1) {
    var numdice = msg.content.replace("!sr ", "");
    sendChat(msg.who, "/roll " + numdice + "d6>4");
  }
});

sendChat(speakingAs, input [,callback [, options]] )

You can use this function to send a chat message.

speakingAs can be one of:

  • Any string, in which case that will be used as the name of the person who sent the message. E.g. "Riley"
  • A player's ID, formatted as "player|-Abc123" where "-Abc123" is the ID of the player. 만약이를하면 플레이어의 아바타와 이름이 자동으로 사용됩니다.
  • 캐릭터의 ID는"character|-Abc123"형식으로 포맷됩니다. 만약이를하면 캐릭터의 아바타와 이름이 자동으로 사용됩니다.


입력은 Roll20 앱에서 사용되는 것과 같은 유효한 표현식이어야합니다. 기본 메시지를 보내려면 텍스트를 입력하거나 "/roll", "/em", "/w" 등의 슬래시 명령을 사용할 수 있습니다. 추가로:

  • 캐릭터 속성을 다음 형식으로 사용할 수 있습니다.@{CharacterName|AttributeName}.
  • 캐릭터 능력을 다음 형식으로 사용할 수 있습니다: %{CharacterName|AbilityName}.
  • 매크로를 사용할 수 없습니다.
  • 당신은 "/direct <msg>" 명령을 사용하여 URL의 자동 링크 등의 처리 없이 메시지를 보낼 수 있으며, 메시지에서 다음 HTML 태그를 사용할 수 있습니다:

 

<code><span><div><label><a><br><br /><p><b><i><del><strike><u><img>
<blockquote><mark><cite><small><ul><ol><li><hr><dl><dt><dd><sup>
<sub><big><pre><figure><figcaption><strong><em><table><tr><td><th>
<tbody><thead><tfoot><h1><h2><h3><h4><h5><h6>

콜백()은 선택적 세 번째 파라미터로, 게임으로 명령을 보내는 대신sendChat()호출의 결과를 전달할 콜백 함수로 구성됩니다. 이렇게sendChat()을 사용하는 것은 비동기적입니다. sendChat() 명령의 결과는 작업의 배열이며, 각 개별 객체는 위의chat:message이벤트에서 받는 객체와 같습니다.

이를 예를 들어 Roll20 롤 엔진을 사용하여 롤을 수행한 다음 롤의 결과를 즉시 얻을 수 있습니다. 게임의 플레이어에게 보내기 전에 롤에 추가 수정을 수행할 수 있습니다.

sendChat("Riley", "/roll 1d20+4", function(ops) {
    // ops는 명령 결과의 배열입니다.
    var rollresult = ops[0];
    // 이제 rollresult와 같은 방식으로 chat:message 이벤트 중에 수행할 수 있습니다...
});

옵션 은 메시지 처리 방법을 설정하기 위한 선택적인 네 번째 매개변수입니다. 옵션은 설정할 옵션의 이름과 해당 옵션의 설정값이 누구의 속성인 자바스크립트 객체로 지정되며, 일반적으로true기본값은 false입니다.

사용 가능한 옵션:

  • noarchive -- 채팅 로그에 메시지가 저장되지 않도록 true로 설정합니다. Mod (API) 버튼 메뉴 및 상태 정보와 같은 이야기의 일부가 아닌 출력에 특히 유용합니다.
  • use3d -- 이제 sendChat() 함수를 사용하여 3D 주사위를 굴릴 수 있습니다. 구문은 간단합니다: sendChat("이름", "[[3d6]] 굴리는 중", null, {use3d: true}); 이름 매개변수에 플레이어 ID를 전달하면 예를 들어 sendChat("player|-ABC123",...) 주사위에 플레이어의 색상이 사용됩니다. 그렇지 않으면 기본 흰색이 사용됩니다. 

    참고: 클라이언트는 한 번에 하나의 3D 롤의 결과만 표시할 수 있으므로 연속으로 여러 개의 별도의 3D 롤을 만드는 것은 유용하지 않습니다. 또한 3D 롤을 사용하면 QuantumRoll 서버에 약간의 부하가 걸리므로 판단을 사용하고 1초 동안 100개의 3D 롤을 수행하지 마십시오. 롤이 플레이어에게 "의미"가 있고 게임에 영향을 줄 때 3D 롤을 사용하세요.

    이러한 옵션을 조정하고 싶지만콜백매개변수(세 번째 매개변수-위 참조)를 사용하고 싶지 않은 경우, 그 자리에null을 전달하면 됩니다:

 

sendChat("상태", "모든 플레이어가 로그인되었습니다.", null, {noarchive:true} );

Mod (API) 명령 버튼

업데이트된 Holding으로 사용할 수 있는 새로운 텍스트 채팅 형식을 활용하여, Mod (API) 명령 버튼"을 채팅에 생성할 수 있습니다.

Markdown 서식을 사용하여 다음과 같이 할 수 있습니다:

[공격 굴림](!attackroll)

대괄호 사이의 텍스트가 버튼에 표시되고 괄호 안의 일부는 실행될 명령입니다. 일반 롤에는 매크로, 능력, 쿼리 등을 포함할 수 있지만, 명령 자체는 클릭한 플레이어에 의해 실행됩니다. 예를 들어, 메시지를 볼 수 있는 모든 사람이 해당 캐릭터에 액세스할 수 없다면 @{Character|AC} 을 포함하지 마십시오. 대신, 명령을 보낸 시점에 실제 값으로 채워서 채팅 메시지를 보내기 전에 직접 입력하십시오. 이 버튼들은 모든 메시지 유형에서 작동합니다. 일반 메시지, 귓속말, gmwhispers 등.

주의: 메시지를 보내기 위해 /direct를 사용하는 경우, 우리는 그것에 대해 Markdown 구문 분석을 수행하지 않으므로, 자신의 <a> 태그를 포함해야 합니다. 다음은 그 예입니다:

<a href="!attackroll">공격 굴림</a>

채팅에서 Mod (API) 버튼 입력

기타 사람들이 사용할 수 있도록 채팅에 Markdown 구문 Mod (API) 버튼을 입력할 수도 있습니다. 채팅 파서에 의해 해석될 것이므로, 버튼이 클릭될 때 속성, 쿼리 및 굴림이 확장되기를 원한다면, 명령의 일부를 특별한 구문 (HTML 엔티티)으로 입력해야 합니다.

캐릭터 대체
 % &#37;
) &#41;
 ? &#63;
@ &#64;
[ &#91; or &lbrack;
] &#93; or &rbrack;

This sample button uses some of them:

[Attack Roll](!attackroll &#64;{target|token_id} &#91;[1d6+&#63;{Bonus|0}]&#93;)

실제로 Mod (API) 버튼을 사용하여 Macros 또는 Abilities를 호출할 수 있습니다.

캐릭터 대체
<carriage return> &#13;

이를 위해 명령 부분을 특수 코드 !&#13; 로 시작한 다음 매크로 호출을 추가하거나 능력 호출을 추가하십시오. # 또는 능력 호출과 함께 &#37; (%)

[매크로](!&#13;#매크로이름)

[능력](!&#13;&#37;{CharName|AbilityName})

참고: 이 시점에서 사이드바의 컬렉션 탭에 저장된 매크로를 다시 열면 내부의 HTML 엔티티가 복원됩니다. 매크로를 저장하면 해당 복원도 저장됩니다. 이 동작은 능력 또는 능력 명령 버튼에서는 나타나지 않습니다.

Ability 명령 버튼의 경우 버튼을 만드는 Ability와 버튼이 참조하는 Ability가 모두 같은 시트에 있는 경우 구문은 매우 간단합니다:

[능력](~능력명)

도움이 되었습니까?
21명 중 14명이 도움이 되었다고 했습니다.