푝무위키
최근 변경
최근 토론
임의 문서
도구
실시간 검색어
검색 기록이 없습니다.
☕
개발자에게 커피 사주기
푝무위키 운영과 개발을 도와주세요
최근 변경
깐냥
(r5 RAW)
||<-2><tablealign=right><tablewidth=375><tablebordercolor=#FEE0D6,#FEE0D6><bgcolor=#FEE0D6,#FEE0D6><tablebgcolor=#ffffff,#2d2f34><tablecolor=#309FD8,#dddddd> {{{#!wiki style="border-bottom:5px solid #FEE0D6; margin:-5px -10px; padding:3px 5px;" {{{#000000 '''{{{+1 깐냥}}}'''}}} }}} || ||<-2><nopad> [[파일:kkan.png|width=100%]] || ||<width=30%><colbgcolor=#FEE0D6,#FEE0D6><colcolor=#000000,#000000> '''제작''' || [[칸나]] || || '''종류''' || [[Discord]] 다기능 봇 || || '''접두사''' || `%[명령어]`[br]`/[명령어]` || || '''사용 모델''' || Gemini 3.1 Flash || || '''개발 언어''' || JavaScript[br]Python || || '''주요 기능''' || [[TETR.IO]], 체스, AI 대화, 웹 검색, V-ARCHIVE, 스타포스 || || '''푝섭 최초 가입일''' || 2026년 5월 22일 || || '''소스 코드''' || [[https://github.com/yddfhbh/kannyan|GitHub]] || [목차] [clearfix] == 개요 == [[칸나]]가 제작하고 운영하는 [[Discord]] 다기능 봇. 본래 [[TETR.IO]] 유저의 프로필과 전적을 조회하는 봇으로 제작되었으나, 개발 과정에서 체스 분석, 체스 퍼즐, AI 대화, 웹 검색, 리듬게임 정보 조회, 스타포스 시뮬레이터 등의 기능이 계속 추가되었다. 현재는 특정 분야에 한정된 봇이라기보다 게임 정보 조회, 이미지 분석, AI 대화와 서버 편의 기능을 함께 제공하는 종합 봇에 가깝다. 특히 단순한 텍스트 출력보다 전용 이미지 카드를 적극적으로 사용하는 것이 특징이다. 대부분의 기능은 Discord의 슬래시 명령어와 `%` 접두사 명령어를 함께 지원한다. 일부 명령어는 사용자의 Discord 계정과 외부 서비스 계정을 연결하여, 닉네임을 직접 입력하지 않아도 사용할 수 있다. == 개발 배경 == 깐냥은 처음부터 다기능 봇으로 계획된 것은 아니었다. 초기 목적은 Discord에서 [[TETR.IO]] 유저의 프로필과 TETRA LEAGUE 전적을 빠르게 조회하는 것이었다. 기존의 전적 조회 사이트를 직접 열지 않고도 Discord 채널에서 결과를 확인할 수 있도록 프로필과 스탯을 이미지 카드 형태로 출력하는 기능이 먼저 만들어졌다. 이후 유저 간 스탯 비교, 플레이스타일 그래프, QUICK PLAY와 40 LINES 등의 개인 기록 조회가 추가되었다. TETR.IO 외의 기능으로는 체스 레이팅 조회와 포지션 분석이 처음 추가되었으며, 이후 AI 대화, 웹 검색, V-ARCHIVE, 스타포스 시뮬레이터 등으로 기능 범위가 확대되었다. 기능이 추가될 때마다 별도의 봇을 새로 만드는 대신 기존 깐냥에 기능을 통합하는 방식으로 개발되었기 때문에, 현재는 서로 성격이 다른 기능들이 하나의 봇에 함께 들어가 있다. == 기능 == === TETR.IO === 깐냥의 최초 기능이자 현재도 가장 비중이 큰 기능이다. TETR.IO API와 외부 통계 자료를 이용하여 유저의 프로필, 리그 스탯, 개인 기록과 최근 경기 결과를 조회한다. 조회 결과 대부분은 깐냥 전용 디자인이 적용된 PNG 이미지로 출력된다. ==== 프로필 카드 ==== TETR.IO 유저의 닉네임, 아바타, 배너, 국가, 레벨, 리그 등급과 주요 기록을 하나의 이미지로 출력한다. 프로필에 공개된 정보가 있는 경우 계정 생성일, 플레이 시간, 승리 횟수와 각종 개인 최고 기록도 함께 표시될 수 있다. 업적이 공개된 유저는 주요 업적과 달성 상태가 카드에 포함되기도 한다. 닉네임을 직접 입력할 수 있으며, TETR.IO 프로필에 Discord 계정이 연결되어 있다면 닉네임을 생략해도 본인의 계정을 자동으로 찾는다. ==== 스탯 카드 ==== TETRA LEAGUE에서 사용하는 주요 스탯을 이미지 카드로 출력한다. 대표적으로 다음 수치를 표시한다. * APM * PPS * VS * APP * DS/Second * DS/Piece * APP+DS/Piece * VS/APM * Cheese Index * Garbage Efficiency APM, PPS, VS를 직접 입력하여 실제 TETR.IO 계정이 아닌 가상의 스탯 카드도 만들 수 있다. ==== 플레이스타일 분석 ==== 유저의 APM, PPS와 VS를 바탕으로 플레이스타일을 그래프로 나타낸다. 그래프는 다음 네 가지 성향을 기준으로 구성된다. * '''Opener''' — 초반 빌드와 공격 전개 성향 * '''Plonk''' — 단발성 고화력 공격 성향 * '''Stride''' — 속도와 지속적인 화력 성향 * '''Inf DS''' — 다운스택과 생존 중심 성향 여러 유저의 닉네임을 한 번에 입력하면 같은 그래프 위에 결과를 겹쳐 표시할 수 있다. APM, PPS와 VS를 직접 입력한 가상 스탯도 함께 비교할 수 있다. ==== 유저 비교 ==== 두 명 이상의 유저를 입력하면 주요 스탯을 한 그래프에서 비교한다. 앞의 두 유저에 대해서는 점수와 스탯을 이용한 예상 승률도 함께 표시한다. 존재하지 않는 닉네임이 입력된 경우 전체 명령을 실패시키지 않고 해당 닉네임만 제외하여 처리한다. ==== 리그 및 개인 기록 ==== TETRA LEAGUE의 최근 경기와 각 게임 모드의 개인 기록을 조회할 수 있다. 지원하는 주요 기록은 다음과 같다. * TETRA LEAGUE 최근 경기 * QUICK PLAY * EXPERT QUICK PLAY * 40 LINES * BLITZ * TETRA LEAGUE 랭크컷 QUICK PLAY와 EXPERT QUICK PLAY는 도달 고도, 40 LINES는 완료 시간, BLITZ는 획득 점수를 중심으로 카드가 구성된다. `top`을 선택하면 최고 기록을, `recent`를 선택하면 최근 기록을 조회한다. ==== 리플레이 분석 ==== TETR.IO에서 저장한 `.ttrm` 리플레이 파일을 Discord 메시지에 첨부하면 해당 게임을 분석한다. 리플레이 안의 공격량, 속도, 다운스택과 게임 진행에 따른 수치 변화를 읽어 MinoMuncher 형태의 그래프로 출력한다. 일반적인 프로필 조회와 달리 사용자가 직접 파일을 첨부해야 한다. ==== 계정 자동 인식 ==== TETR.IO 프로필에 Discord 계정이 연결되어 있는 유저는 일부 명령어에서 닉네임을 생략할 수 있다. 명령어 작성자의 계정뿐 아니라 다음 대상도 자동으로 조회할 수 있다. * Discord에서 멘션한 유저 * 답장한 메시지의 작성자 * 명령어에 직접 입력한 TETR.IO 닉네임 단, 해당 유저가 TETR.IO 프로필에 Discord 계정을 연결하지 않았다면 자동 인식이 작동하지 않는다. ==== 대표 명령어 ==== ||<tablewidth=100%><tablebordercolor=#FEE0D6,#555555><bgcolor=#FEE0D6,#2d2f34> '''{{{#000000,#dddddd 명령어}}}''' ||<bgcolor=#FEE0D6,#2d2f34> '''{{{#000000,#dddddd 설명}}}''' || || `/테토` · `%teto` || TETR.IO 프로필 카드를 출력한다. || || `/스탯` · `%ts` || TETRA LEAGUE 스탯 카드를 출력한다. || || `/그래프` · `%psq` || 플레이스타일 그래프를 출력한다. || || `/비교` · `%vs` || 여러 유저의 주요 스탯과 예상 승률을 비교한다. || || `/랭크컷` · `%tetr` || 현재 TETRA LEAGUE 랭크컷을 출력한다. || || `/전적` · `%tetra` || 최근 TETRA LEAGUE 경기 결과를 조회한다. || || `/퀵플` · `%qp` || QUICK PLAY 기록을 조회한다. || || `/익스퀵플` · `%exqp` || EXPERT QUICK PLAY 기록을 조회한다. || || `/40라인` · `%40L` || 40 LINES 기록을 조회한다. || || `/블리츠` · `%blitz` || BLITZ 기록을 조회한다. || || `/분석` · `%munch` || 첨부한 `.ttrm` 리플레이 파일을 분석한다. || === 체스 === 체스 계정의 레이팅 조회, 포지션 분석, 퍼즐과 봇 대국 등의 기능을 제공한다. ==== 레이팅 조회 ==== Chess.com과 Lichess 유저의 레이팅을 조회할 수 있다. Chess.com은 래피드, 블리츠, 불렛과 퍼즐 레이팅을 표시하며, Lichess는 래피드, 블리츠와 불렛 등의 레이팅을 표시한다. 닉네임뿐 아니라 해당 사이트의 프로필 주소를 입력해도 유저를 인식할 수 있다. ==== 유저 비교 및 승률 예측 ==== 두 유저의 레이팅을 비교하고 Elo 공식에 따른 예상 승률을 계산한다. 실제 계정 닉네임을 입력하는 방식과 임의의 두 점수를 직접 입력하는 방식을 모두 지원한다. 계산 결과는 실제 경기 결과를 보장하는 예측이 아니라 레이팅 차이를 수학적으로 변환한 값이다. ==== 체스판 이미지 분석 ==== 체스판이 포함된 이미지를 첨부하면 이미지에서 말의 위치를 인식하여 FEN으로 변환한다. 이후 Stockfish를 이용해 현재 포지션을 분석하고 가장 좋은 수와 간단한 설명을 출력한다. 백과 흑 중 어느 차례인지 명령어 또는 문장으로 지정할 수 있다. 다음과 같은 형태의 입력을 사용할 수 있다. {{{#!wiki style="border-left:4px solid #FEE0D6; padding:8px 12px;" 체스판 이미지 첨부 %백선 }}} 또는 다음과 같이 자연스러운 표현을 사용할 수 있다. {{{#!wiki style="border-left:4px solid #FEE0D6; padding:8px 12px;" %여기서 백은 뭘 둬야 돼? }}} 이미지 인식에 실패한 경우에는 `%fen` 명령어로 FEN을 직접 입력할 수 있다. ==== 분석 방식 ==== 체스판 이미지 인식에는 Python 기반 이미지 분석 도구가 사용되며, 인식된 포지션은 구조 검사를 거친 뒤 Stockfish로 전달된다. 분석 결과는 단순히 엔진의 평가값만 출력하지 않고, 현재 차례인 색과 추천 수를 포함한 자연스러운 문장으로 정리된다. 필요한 경우 여러 후보 수를 비교하지만, 일반 사용자에게는 분석 과정 전체보다 실제로 둘 만한 수를 중심으로 설명한다. ==== 체스 퍼즐 ==== 매일 새로운 체스 퍼즐을 DM으로 풀 수 있는 일일 퍼즐 기능을 제공한다. 사용자는 수를 직접 입력하여 퍼즐을 진행하며, 틀린 수를 두거나 포기한 경우 결과가 기록된다. 같은 날의 퍼즐은 서버 설정과 진행 상태에 따라 다시 도전할 수 없을 수도 있다. 퍼즐 러시에서는 제한된 목숨 안에 여러 퍼즐을 연속으로 해결한다. 퍼즐 결과를 바탕으로 개인 레이팅과 순위표를 관리하는 기능도 제공한다. ==== 봇과 대국 ==== Discord 채팅에서 깐냥과 직접 체스를 둘 수 있다. 사용자가 백과 흑 중 원하는 색을 선택하면 봇이 상대편을 맡는다. 착수는 SAN 표기를 중심으로 처리하지만, 일부 일반적인 입력 차이도 허용한다. 봇은 항상 Stockfish의 1순위 수만 두는 것이 아니라 여러 후보 수 중 하나를 선택하도록 조정되어 있다. 따라서 일반적인 엔진 대국보다 수가 다소 다양하게 나타날 수 있다. ==== 대표 명령어 ==== ||<tablewidth=100%><tablebordercolor=#FEE0D6,#555555><bgcolor=#FEE0D6,#2d2f34> '''{{{#000000,#dddddd 명령어}}}''' ||<bgcolor=#FEE0D6,#2d2f34> '''{{{#000000,#dddddd 설명}}}''' || || `/체닷` · `%체닷` || Chess.com 유저의 레이팅을 조회한다. || || `/리체스` · `%리체스` || Lichess 유저의 레이팅을 조회한다. || || `/체스비교` || 두 체스 유저의 레이팅과 예상 승률을 비교한다. || || `/승률예측` || 직접 입력한 두 점수로 Elo 기반 승률을 계산한다. || || `%fen` || 입력한 FEN을 Stockfish로 분석한다. || || `/일일퍼즐` · `%일일퍼즐` || 오늘의 체스 퍼즐을 DM으로 시작한다. || || `/라이브레이팅` || 2700chess의 실시간 상위 레이팅을 출력한다. || === AI 대화 === 등록된 `%` 명령어가 아닌 문장을 입력하면 AI 대화 기능으로 처리된다. 예를 들어 다음과 같이 사용할 수 있다. {{{#!wiki style="border-left:4px solid #FEE0D6; padding:8px 12px;" %오늘 할 일 정리해줘 }}} 명령어와 일반 대화를 구분하기 위한 별도의 `/AI` 명령어를 매번 입력할 필요 없이, `%` 뒤에 질문을 작성하면 된다. ==== 대화 맥락 ==== AI는 현재 메시지만 확인하는 것이 아니라 상황에 따라 다음 내용도 함께 참고한다. * 현재 채널에서 이어진 이전 대화 * 사용자가 답장한 메시지 * 메시지에서 멘션한 유저와 관련된 내용 * 함께 첨부된 이미지 * 서버에 저장된 영구 기억 * 최신 정보가 필요한 경우의 웹 검색 결과 이를 통해 단순한 일회성 질문뿐 아니라 앞선 대화를 이어가는 형태의 질문도 처리할 수 있다. 단, 기억되는 대화의 범위와 보관 기간에는 제한이 있으며 오래된 대화는 자동으로 삭제될 수 있다. ==== 이미지 분석 ==== 질문과 함께 이미지를 첨부하면 이미지의 내용을 AI가 분석할 수 있다. 이미지만 첨부하고 `%`를 보내거나, 이미지가 포함된 다른 메시지에 답장하면서 `%`를 보내는 방식도 지원한다. 지원하는 주요 형식은 다음과 같다. * JPEG * PNG * WebP * HEIC * HEIF 한 번에 지나치게 많은 이미지나 용량이 큰 이미지는 처리되지 않을 수 있다. ==== 웹 검색 ==== 최신 정보가 필요한 질문은 웹 검색 결과를 참고하여 답변한다. 다음처럼 검색을 직접 요청할 수도 있다. {{{#!wiki style="border-left:4px solid #FEE0D6; padding:8px 12px;" %검색 오늘 주요 뉴스 }}} 또한 사용자가 명시적으로 검색을 요청하지 않아도 날씨, 최근 발표, 현재 가격처럼 최신 정보가 필요한 질문이라고 판단되면 자동으로 검색할 수 있다. 검색 결과를 가져오지 못하거나 AI 모델 호출에 실패한 경우에는 답변이 제한되거나 검색 결과 목록만 표시될 수 있다. ==== 기억 기능 ==== 채널에서 진행된 일반 대화는 일정 기간 임시 기억으로 보관된다. 이와 별도로 `/가르치기` 명령어나 `기억해줘`라는 표현을 사용하면 특정 정보를 서버별 영구 기억에 저장할 수 있다. 예시는 다음과 같다. {{{#!wiki style="border-left:4px solid #FEE0D6; padding:8px 12px;" %파이호크의 주 종목은 테트리스라고 기억해줘 }}} 영구 기억에는 정보를 알려준 사용자가 함께 기록된다. 이후 AI가 해당 정보를 답변에 사용하면 누가 알려준 내용인지 출처가 표시될 수 있다. 영구 기억은 일반 대화 기록과 달리 자동으로 만료되지 않으므로, 잘못된 내용을 저장하지 않도록 주의할 필요가 있다. ==== 사용 모델 ==== 운영 환경에서는 Gemini 계열 모델을 사용한다. 기본 모델의 요청이 실패하거나 사용량 제한에 도달한 경우 다른 모델을 순서대로 시도하는 예비 처리 구조가 적용되어 있다. 이미지가 첨부된 질문은 일반 텍스트 질문과 다른 이미지 처리용 모델을 사용할 수 있다. AI가 생성한 답변은 사실과 다를 수 있으므로 중요한 정보는 별도로 확인하는 것이 권장된다. === V-ARCHIVE === [[DJMAX RESPECT V]] 기록 사이트인 V-ARCHIVE와 연동되는 기능이다. 사용자는 자신의 V-ARCHIVE 닉네임을 Discord 계정에 저장한 뒤, 이후 명령어에서 닉네임을 생략하고 기록을 조회할 수 있다. ==== 티어 카드 ==== 사용자의 상위 성과를 기준으로 B10, B30과 B50 카드를 출력한다. 각 카드에는 곡명, 버튼 모드, 난이도, 점수와 정확도 등의 기록이 포함될 수 있다. 결과는 V-ARCHIVE의 데이터와 깐냥의 전용 카드 디자인을 조합하여 이미지로 출력된다. ==== 곡 정보 ==== 곡 제목을 입력하면 해당 곡의 4B, 5B, 6B와 8B 난이도를 조회한다. 대소문자와 일부 특수문자 차이를 보정하여 검색하며, 정확한 제목을 입력하지 않아도 유사한 곡을 찾을 수 있도록 검색 편의 기능이 적용되어 있다. 일부 곡은 한국어 별칭이나 서버 내부에서 사용하는 이름으로도 검색할 수 있다. ==== 개인 성과 ==== 특정 곡을 입력하면 연결된 사용자의 해당 곡 기록을 조회한다. 버튼 모드별 최고 점수와 정확도, 클리어 상태 등을 확인할 수 있다. ==== 대표 명령어 ==== ||<tablewidth=100%><tablebordercolor=#FEE0D6,#555555><bgcolor=#FEE0D6,#2d2f34> '''{{{#000000,#dddddd 명령어}}}''' ||<bgcolor=#FEE0D6,#2d2f34> '''{{{#000000,#dddddd 설명}}}''' || || `/브아카` || V-ARCHIVE 닉네임을 연결하거나 변경한다. || || `/b10` || 상위 10곡을 기준으로 티어 카드를 출력한다. || || `/b30` || 상위 30곡을 기준으로 티어 카드를 출력한다. || || `/b50` || 상위 50곡을 기준으로 티어 카드를 출력한다. || || `/곡정보` · `/서열표` || 곡의 버튼별 난이도를 조회한다. || || `/성과` || 특정 곡의 개인 기록을 조회한다. || === 스타포스 시뮬레이터 === [[메이플스토리]]의 스타포스 강화를 Discord에서 체험할 수 있도록 만든 시뮬레이터다. 사용자가 장비 레벨, 시작 스타포스와 각종 강화 조건을 설정한 뒤 버튼을 눌러 직접 강화를 진행한다. 지원하는 주요 요소는 다음과 같다. * 스타포스 성공·실패·파괴 확률 * 강화 단계 상승과 하락 * 장비 파괴 * 파괴 방지 * 찬스 타임 * 스타캐치 * 강화 비용 계산 * 진행 상황 저장 및 불러오기 * 종료 시 사용 메소와 강화 횟수 집계 * 개인 기록과 순위표 스타캐치를 활성화하면 강화 버튼이 별도의 미니게임 버튼으로 변경되며, 사용자는 랜덤하게 지정된 버튼을 선택하여 성공 여부를 결정한다. 실제 메이플스토리의 모든 시기와 이벤트 확률을 완전히 재현하는 것은 아니며, 깐냥에 적용된 확률표와 설정을 기준으로 동작한다. === 서버 관리 및 편의 기능 === 게임과 AI 외에도 Discord 서버 운영에 사용할 수 있는 기능이 포함되어 있다. ==== 알람 ==== 내용과 시간을 입력하면 지정한 시간이 지난 뒤 명령어 작성자를 멘션한다. 최대 설정 시간과 실제 알림 가능 여부는 봇의 재시작 및 저장 방식에 따라 제한될 수 있다. ==== 개념글 ==== 특정 메시지에 지정된 이모지 반응이 일정 개수 이상 달리면 해당 메시지를 개념글 채널로 전송한다. 서버별로 대상 채널, 이모지와 필요한 반응 개수를 설정할 수 있다. 전송된 메시지에는 작성자, 원문 내용, 날짜와 원본 메시지로 이동하는 링크가 포함된다. ==== 블랙리스트 ==== 관리자는 특정 Discord 사용자의 깐냥 이용을 제한할 수 있다. 블랙리스트에 등록된 사용자는 일반 명령어와 일부 상호작용을 사용할 수 없으며, 목록의 추가·제거와 확인은 지정된 관리자만 수행할 수 있다. ==== 기타 ==== * 2700chess 실시간 레이팅 조회 * 서버별 AI 영구 기억 * 최신 정보 웹 검색 * 일정 시간 뒤 멘션 알람 * 각종 게임 기록 이미지 출력 * 봇 상태 확인용 헬스체크 == 사용법 == === 슬래시 명령어 === Discord 채팅 입력창에 `/`를 입력하면 사용 가능한 명령어와 선택지를 화면에서 확인할 수 있다. 슬래시 명령어는 닉네임, 숫자와 모드 등의 선택지를 Discord 화면에서 직접 입력할 수 있으므로 처음 사용하는 기능에 적합하다. 예시는 다음과 같다. {{{#!wiki style="border-left:4px solid #FEE0D6; padding:8px 12px;" /테토 닉네임:HEBI_ }}} === 접두사 명령어 === 메시지 앞에 `%`를 붙여 명령어를 실행할 수 있다. 슬래시 명령어보다 빠르게 입력할 수 있고, 답장이나 멘션과 함께 사용하기 편리하다. {{{#!wiki style="border-left:4px solid #FEE0D6; padding:8px 12px;" %teto HEBI_ }}} 일부 명령어는 닉네임을 생략하고 다음과 같이 사용할 수 있다. {{{#!wiki style="border-left:4px solid #FEE0D6; padding:8px 12px;" %teto }}} 이 경우 깐냥은 명령어 작성자의 Discord 계정에 연결된 TETR.IO 계정을 찾는다. === 답장과 멘션 === 일부 명령어는 다른 사용자의 메시지에 답장하거나 사용자를 멘션하여 대상을 지정할 수 있다. 예시는 다음과 같다. {{{#!wiki style="border-left:4px solid #FEE0D6; padding:8px 12px;" %teto @사용자 }}} 또는 조회하려는 사용자의 메시지에 답장하면서 `%teto`를 입력할 수 있다. 외부 계정 연결이 없는 사용자는 멘션만으로 닉네임을 찾을 수 없다. === 첨부 파일 === 체스판 이미지 분석, AI 이미지 분석과 TETR.IO 리플레이 분석은 메시지에 파일을 첨부해야 한다. 지원하지 않는 확장자, 손상된 파일, 지나치게 큰 파일은 거부될 수 있다. === 도움말 === 현재 사용 가능한 명령어 목록은 다음 중 하나를 입력하여 확인할 수 있다. * `/도움말` * `%도움말` * `%help` 기능 추가와 수정이 잦아 위키 문서의 명령어 목록이 실제 봇보다 늦게 갱신될 수 있으므로, 가장 정확한 목록은 봇의 도움말을 확인하는 것이 좋다. == 출력 방식 == 깐냥은 가능한 경우 조회 결과를 이미지 카드로 출력한다. 텍스트 메시지만 사용하는 것보다 여러 수치와 정보를 한 화면에 배치하기 쉽고, Discord 모바일 환경에서도 결과를 확인하기 편리하기 때문이다. 주요 이미지 카드에는 다음이 포함된다. * TETR.IO 프로필 카드 * TETR.IO 스탯 카드 * 플레이스타일 그래프 * 유저 비교 그래프 * TETRA LEAGUE 최근 전적 카드 * QUICK PLAY 고도 카드 * 40 LINES 시간 카드 * BLITZ 점수 카드 * TETR.IO 업적 카드 * 2700chess 라이브레이팅 카드 * V-ARCHIVE 티어 및 성과 카드 * 체스 퍼즐판과 순위표 이미지 렌더링 과정에서 외부 이미지를 불러오지 못하거나 한글 글꼴이 정상적으로 설치되지 않은 경우 일부 카드의 이미지나 문자가 다르게 표시될 수 있다. == 기술적 구성 == 깐냥은 Node.js와 `discord.js`를 기반으로 개발되었다. 주요 구성은 다음과 같다. * '''discord.js''' — Discord Gateway 연결, 메시지와 슬래시 명령어 처리 * '''sharp''' — TETR.IO와 각종 기록 이미지 렌더링 * '''Stockfish WASM''' — 체스 포지션 분석 * '''Python 및 chessimg2pos''' — 체스판 이미지에서 말의 위치 인식 * '''Gemini 계열 API''' — AI 대화와 이미지 분석 * '''웹 검색 모듈''' — 최신 정보 검색과 결과 정리 * '''JSON 데이터 파일''' — 사용자 설정, AI 기억과 일부 게임 데이터 저장 * '''PM2''' — 운영 서버에서 프로세스 실행과 재시작 관리 운영 환경에서는 Ubuntu 기반 가상 머신에서 실행된다. 봇 프로세스와 데이터 디렉터리를 분리하여 코드가 새 버전으로 교체되더라도 사용자 설정과 기록이 유지되도록 구성되어 있다. 슬래시 명령어를 추가하거나 선택지를 변경한 경우에는 봇을 재시작하는 것과 별개로 Discord API에 명령어를 다시 등록해야 한다. == 외부 서비스 == 깐냥의 일부 기능은 외부 서비스와 API에 의존한다. 대표적으로 다음 서비스가 사용된다. * Discord * TETR.IO * Chess.com * Lichess * 2700chess * V-ARCHIVE * Google Gemini * 웹 검색 서비스 외부 사이트가 점검 중이거나 API 형식을 변경하면 관련 기능이 일시적으로 작동하지 않을 수 있다. 깐냥 자체가 정상적으로 온라인이어도 특정 기능만 실패할 수 있다. == 운영 및 제한 사항 == === 이용 제한 === 명령어 남용이나 외부 API의 사용량 초과를 방지하기 위해 일부 기능에는 재사용 대기 시간과 요청 제한이 적용될 수 있다. AI 대화와 이미지 분석은 외부 모델의 사용량 제한에 영향을 받는다. 기본 모델 호출이 실패하면 예비 모델을 시도하지만, 모든 모델의 요청이 실패하면 답변을 생성하지 못한다. === 개인정보와 기억 === 깐냥은 기능 제공을 위해 Discord 사용자 ID, 외부 서비스 닉네임, 서버별 설정과 AI 기억을 저장할 수 있다. 영구 기억 기능에 입력한 내용은 자동으로 삭제되지 않을 수 있으므로 비밀번호, 주소, 전화번호와 같은 민감한 개인정보를 저장해서는 안 된다. === 분석 결과의 한계 === 체스판 이미지 인식은 이미지 품질과 판 디자인에 따라 잘못된 FEN을 만들 수 있다. AI 답변과 웹 검색 결과도 항상 정확한 것은 아니며, 최신 정보나 중요한 판단이 필요한 내용은 원문을 별도로 확인해야 한다. TETR.IO와 V-ARCHIVE의 기록은 외부 서비스에서 제공하는 값을 바탕으로 하므로, 해당 서비스의 데이터 갱신이 늦으면 깐냥의 결과도 이전 상태로 표시될 수 있다. === 기능 변경 === 깐냥은 기능 추가와 수정이 자주 이루어진다. 명령어 이름, 출력 형식, 지원 모드와 계산 방식이 변경될 수 있으며, 오래된 이미지나 설명과 현재 출력 결과가 다를 수 있다. == 특징 == === 다양한 기능의 통합 === 일반적으로 TETR.IO, 체스, AI와 리듬게임 봇은 각각 별도로 운영되는 경우가 많지만, 깐냥은 이 기능들을 하나의 Discord 봇에 통합하였다. 따라서 사용자는 여러 봇을 각각 초대하지 않고도 한 봇으로 다양한 기능을 사용할 수 있다. === 이미지 카드 중심 === 단순한 텍스트 목록보다 이미지 카드와 그래프를 적극적으로 사용한다. 특히 TETR.IO와 V-ARCHIVE 관련 기능은 원본 서비스의 디자인을 일부 참고하면서도 깐냥만의 배치와 스타일을 사용한다. === 짧은 명령어 === 자주 사용하는 기능은 `%teto`, `%ts`, `%qp`처럼 짧은 접두사 명령어를 제공한다. 슬래시 명령어도 함께 지원하므로 사용자는 입력 속도와 편의성에 따라 원하는 방식을 선택할 수 있다. === 지속적인 기능 추가 === 처음에는 TETR.IO 전용에 가까웠지만, 제작자가 필요하다고 생각한 기능이 계속 통합되면서 현재의 형태가 되었다. 기능 범위가 넓다는 장점이 있지만, 코드와 데이터의 규모가 커지고 각 기능을 관리하기 복잡해졌다는 단점도 있다. == 역사 == === 2026년 === * '''5월 22일''' — 파이호크섭에 최초로 참가하였다. * TETR.IO 프로필 및 스탯 카드 기능을 중심으로 운영되기 시작하였다. * TETRA LEAGUE 전적과 QUICK PLAY, 40 LINES, BLITZ 기록 조회가 추가되었다. * 체스 레이팅 조회와 체스판 이미지 분석 기능이 추가되었다. * AI 대화, 이미지 분석과 웹 검색 기능이 추가되었다. * 서버별 임시 기억과 영구 기억 기능이 도입되었다. * V-ARCHIVE 기록 조회와 스타포스 시뮬레이터가 추가되었다. * 체스 퍼즐, 퍼즐 러시와 봇 대국 기능이 확장되었다. * TETR.IO 업적 카드와 각종 이미지 카드의 디자인 개선이 진행되었다. == 여담 == * 이름과 외형은 고양이를 모티브로 한다. * 이름은 고양이 울음소리를 변형한 표현에서 유래하였다. * 고양이 캐릭터를 사용하지만 모든 문장에 반드시 `냥`을 붙이지는 않는다. * 초기에는 TETR.IO 관련 기능만 지원했기 때문에 저장소의 설명에도 TETR.IO와 체스 봇이라는 흔적이 남아 있다. * 새로운 기능을 별도 봇으로 분리하기보다 깐냥에 통합하는 경우가 많아 기능 수가 지속적으로 증가하고 있다. * 기능이 많아지면서 제작자도 전체 명령어를 한 번에 기억하지 못하는 경우가 있다. * 특정 기능을 수정하다가 관련 없는 이미지 카드의 디자인까지 함께 수정되는 일이 종종 있다. * 로컬 테스트 화면과 실제 운영 봇의 렌더링 결과가 다르게 나타난 적이 있다. * 봇의 기능보다 이미지 카드의 간격이나 글자 위치를 수정하는 데 더 많은 시간이 사용되기도 한다. == 관련 문서 == * [[칸나]] * [[파이호크섭]] * [[푝무위키]] * [[TETR.IO]] * [[Discord]] * [[DJMAX RESPECT V]] [[분류:디스코드 봇]] [[분류:파이호크섭]]
Liberty
|
the tree