서론
리스는 다양한 중괄호 구문(Curly Braced Syntax)을 통해 자바스크립트 등을 전혀 모르는 사람들이라도 마일드하게 변수, 변수 계산, 배열 등 다양한 기능을 사용할 수 있도록 해 놓았다. 대부분의 구문은 이 렌트리에서 확인할 수 있고, 몇몇 신 구문의 경우 리스 공지에서 업데이트를 확인할 수 있다.
변수 기능은 활용 가능성이 무궁무진하다. 나도 봇카드 실시간 업데이트나 자동 페르소나 변경 글을 쓴 적이 있는데, 이렇게 프롬프팅/기능적인 측면이 아니라도 변수나 배열 등 기능은 AI 모델 성능과는 전혀 관계 없이 프론트엔드 자체에서 저장/계산 등을 담당하는 것이기 때문에 RPG 봇의 스탯, 시뮬 봇의 현재 상태/돈 등 다양한 상황에서 모델의 연산 부담과 찐빠 걱정 없이 유용하게 쓸 수 있다.
하지만 아무리 기능이 단순하다고 해도 코딩 같은 것을 전혀 모르는 경우 변수 기능에 섣불리 손을 대기 어려운 게 사실이다. 따라서 이 글에서는 변수 개념과 리스 중괄호 구문에서의 관련 기능들에 대해 간단하게 설명해 보고자 한다.
주의사항
- 중괄호 구문은 채팅 메시지, 봇카드/페르소나 디스크립션, 로어북 등 리퀘스트에 포함되는 대부분의 항목에서 사용할 수 있다.
- 하지만 {{setvar}} 등 퍼메에서 작동하지 않는 구문도 있기 때문에 렌트리를 잘 확인해야 한다.
- 변수 기능 등은 메시지가 '전송될 때' 작동한다. 순서에 유의해야 한다.
- 대소문자는 구분되지 않는다. 예를 들어, {{user}}, {{User}}, {{USER}}는 모두 같은 값을 가진다.
- 원인은 모르겠으나 트리거 스크립트에서는 변수 기능이 잘 작동하지 않는다.
변수(var) 만들기/불러오기
변수(Variable, var)는 일종의 그릇 같은 개념이다. 이 그릇에는 우리가 원하는 문자, 숫자 등을 담을 수 있고, 그릇 하나하나에도 이름을 붙여 구분할 수 있다.
빈 유리컵에 '체력'이라는 이름을 붙이고, 그 그릇에 '98'을 담아 보자. 다른 그릇에는 '정신력'이라는 이름을 붙이고, '86'을 담아 보자.
그러면 우리는 체력이 얼마야? 라는 질문에 '98', 정신력이 얼마야? 라는 질문에 '86'이라고 대답할 수 있다.
리스에서 그릇에 이름을 붙이고, 내용물을 담기 위해서는 {{setvar}} 구문을 사용한다. set variable, 즉 변수를 세팅한다는 개념이다.
{{setvar::그릇 이름::내용물}}
위의 '체력'과 '정신력' 예시를 구현하자면 다음과 같이 된다.
{{setvar::체력::98}}
{{setvar::정신력::86}}
이렇게 이름을 붙이고 내용물을 넣은 그릇들은 화면상에서는 보이지 않는다.
대신 리스 냉장고에 차곡차곡 저장되어, 꺼내오지 않으면 우리 눈으로는 확인할 수 없다.
이 때 그릇에 뭐가 들었는지 내용물을 확인하기 위해 사용하는 것이 {{getvar}} 구문이다. get variable, 즉 변수를 얻는다는 개념이다.
{{getvar::그릇 이름}}
만약 '정신력'이 현재 얼마인지를 확인하고 싶다면 '정신력' 그릇을 꺼내 내용물을 확인해야 한다.
{{getvar::정신력}}
이 구문은 화면상에서 정신력에 들어있는 값인 '86'으로 치환된다.
그릇에는 숫자 뿐 아니라 문자도 담을 수 있다.
{{setvar::nsfw::on}}
'nsfw' 라는 변수에 'on' 이 담겼다는 뜻이다.
어떤 변수든 사용하기 위해서는 {{setvar}}를 먼저 사용해서 그릇을 세팅해 주어야 하는 것을 잊지 말자.
실제 사용 방법 예시
로어북을 만들어 체력과 정신력 항목을 표시해 보자. 우리가 원하는 모습은 다음과 같다.
체력: (체력 값)
정신력: (정신력 값)
체력 값과 정신력 값을 불러오기 위해 getvar 구문을 사용할 수 있다.
체력: {{getvar::체력}}
정신력: {{getvar::정신력}}
![]() |
{{getvar}}를 활용한 로어북 생성 예시 |
하지만 아직 우리는 '체력'과 '정신력'이라는 그릇에 내용물을 담지 않았기 때문에, {{getvar}}는 지금으로서는 아무런 의미도 없다.
그릇을 만들고 내용물을 채우기 위해 {{setvar}}를 전송해 보자.
![]() |
{{setvar}} 전송 예시 |
![]() |
결과물-리퀘스트 로그 |
![]() |
결과물-화면 |
변수 계산하기
변수 값이 숫자일 경우에는 저장된 변수에 값을 더하고 빼거나, 변수끼리 서로 사칙연산을 하는 게 가능하다.
이 때 사용할 수 있는 것이 {{addvar}} 구문과 {{calc}} 구문이다.
{{addvar}}
그릇에 내용물을 더하거나 빼고 싶을 때 사용하는 것이 addvar, 즉 add variable 기능이다.
{{addvar::그릇 이름::값}}
이 때 '값'에는 음수도 들어갈 수 있고, 당연히 뺄셈으로 계산된다.
'체력'에서 8을 빼려면 다음과 같이 하면 된다.
{{addvar::체력::-8}}
![]() ![]() |
{{addvar}} 과정 및 결과 |
중요한 것은 {{addvar}}의 경우 그릇에 들어가 있는 내용물 자체, 즉 변수 값을 바꾼다는 사실이다. 이는 아래에 있는 {{calc}}와 가장 주요한 차이이다.
{{calc}}
{{calc}}, calculate 구문의 경우 기본적으로는 사칙연산 식의 결과를 반환, 즉 표시하거나 리퀘스트에 포함해 준다.
{{calc::(식)}}
이 때 식은 단순한 계산식을 적어도 된다.
{{calc::3*6}}
![]() ![]() |
{{calc}} 단순 계산식 결과 |
하지만 우리는 변수끼리 계산하기를 원한다. 이 경우에는 숫자 대신 {{getvar}}를 통해 변수 값을 불러와 계산시키면 된다.
예를 들어, 체력과 정신력을 더하고 싶을 때 {{calc}}를 사용할 수 있다.
{{calc::{{getvar::체력}}+{{getvar::정신력}}}}
이제 구문이 중첩되기 시작했으니 중괄호를 열고 닫는 것에 주의해 주어야 한다.
조금 어지러울 수도 있겠지만, 핵심은 '값' 자리에 {{getvar}}를 넣는 것이다.
{{calc::{{getvar::체력}}+{{getvar::정신력}}}} |
{{calc::90+86}} |
{{calc::{{getvar::체력}}+{{getvar::정신력}}}} 은 계산 결과값인 176으로 나타날 것이다.
![]() ![]() |
{{calc}} 변수 계산식 결과 |