봇에 대한 슬래시 명령을 시행하기로 한 Discord의 결정으로 인해 이 프로젝트 개발을 중단하겠습니다. 즉, 어떤 문제나 버그도 수정하지 않고 새로운 기능을 추가하지도 않을 것입니다. 프로젝트는 GitHub에 남아 있지만 달성될 것입니다.
제가 이 결정을 내린 주된 이유는 슬래시 명령을 사용하도록 봇을 변환하려면 전체 명령 논리를 다시 작성해야 하기 때문입니다. 나는 코드 베이스의 주요 부분을 다시 작성할 시간도 동기도 없습니다. 게다가 dynoBot은 유지 관리가 상당히 어렵습니다. 특히 깨지기 쉬운 다른 npm 패키지에 의존하는 음악 스트리밍 모듈의 경우 더욱 그렇습니다.
그러므로, 아쉽게도 이 프로젝트를 잠정 중단하겠습니다.
dynoBot은 JavaScript와 선택적으로 Python 및 Lua를 사용하는 모듈식 Discord 봇입니다. 이는 귀하가 선호하는 스크립팅 언어로 쉽게 새 모듈을 생성할 수 있는 방식으로 구축되었습니다.
봇의 기본 아이디어는 최소한의 노력으로 필요한 모듈을 직접 만드는 것입니다. 따라서 dynoBot은 discord api와 관련된 모든 것을 처리하는 프레임워크로 간주할 수 있으므로 즉시 자신만의 모듈 개발을 시작할 수 있습니다.
그럼에도 불구하고, 포함된 모듈만 있으면 한 줄의 코드도 작성하지 않고도 dynoBot을 사용할 수 있습니다.
봇에는 현재 다음과 같은 모듈이 있습니다.
디스코드 채팅에 "@BotName help"를 입력하면 사용 가능한 모든 명령을 볼 수 있습니다. 또는 Commands.json 파일을 살펴볼 수도 있습니다.
먼저 Python 모듈에는 nodejs가 필요하고 선택적으로 python3이 필요하고 Lua 모듈에는 lua가 필요합니다. 설치 후 이 저장소를 복제하고 dynoBot
폴더 내에서 npm install
실행하세요. 필요한 모든 종속성을 설치해야 합니다.
Discord 봇을 실행하려면 dynoBot/cfg
디렉터리에 security.json
파일을 추가해야 합니다. 다음과 같아야 합니다.
{
"token" : " your discord bot token "
}
중요: 이 프로젝트를 포크할 때 security.json을 저장소에 업로드하지 마세요. 이렇게 하면 다른 사람들이 귀하의 불일치 토큰을 훔칠 수 있습니다.
Wolfram|Alpha 모듈을 사용하려면 security.json
에도 API 키가 필요합니다. 여기에서 무료 Wolfram|Alpha API 키를 요청할 수 있습니다.
API 키를 사용하면 security.json이 다음과 같아야 합니다.
{
"token" : " your discord bot token " ,
"wolframAlphaAPI" : " your api key "
}
기본적으로 모든 로그는 콘솔에 기록됩니다. 로그를 로그 파일에 기록하려면 다음과 같이 security.json
에서 로깅을 활성화해야 합니다.
{
"token" : " your discord bot token " ,
"logging" : true
}
이제 dynoBot
디렉터리 내에서 node main.js
명령을 사용하여 봇을 시작할 수 있습니다.
JavaScript, Python 또는 Lua로 모듈을 만들 수 있습니다. 모듈에는 채팅 모듈과 후크 모듈의 두 가지 유형이 있습니다. 사용자가 해당 명령어를 포함한 메시지를 보낼 때마다 채팅 모듈이 실행됩니다. 특정 간격으로 Hook이 자동으로 실행됩니다. 아래에서는 JavaScript, Python 및 Lua에서 이를 생성하는 방법을 보여 드리겠습니다. 또는 프로젝트에 포함된 JavaScript, Python 및 Lua용 예제 모듈을 살펴볼 수도 있습니다.
JavaScript, Python 및 Lua 모듈에는 다음과 같은 Commands.json 파일 항목이 필요합니다.
{
"group" : " command-group-name " ,
"type" : " python " ,
"regex" : " py-example|python example " ,
"help" : " python example " ,
"path" : " src/py-modules/example-python.py " ,
"hidden" : false
}
help 속성의 내용은 명령 목록에 사용됩니다. 존재하지 않는 경우 정규식 속성이 사용됩니다.
그룹 속성을 사용하면 help 명령을 사용하는 동안 필터링을 허용할 수 있습니다. 예를 들어 모든 내장 핵심 명령을 포함하는 "basic"이라는 그룹이 있습니다. 명령 목록에서 "기본" 그룹의 명령만 보려면 일반 도움말 명령 대신 "help"를 사용하십시오.
Hidden을 true로 설정하면 해당 명령이 명령 목록에서 제외됩니다.
JavaScript 모듈은 discord.js 래퍼에 직접 액세스할 수 있습니다. 모듈의 기본 구조는 다음과 같습니다.
module . exports = {
run : function ( msg , client ) {
msg . getTextChannel ( ) . send ( "I received these parameters: " + msg . getContentArray ( ) ) ;
}
} ;
모듈이 호출될 때 실행되는 코드는 run 함수에 속합니다. msg 및 client 매개변수는 chatbot-api-wrapper에 의해 제공됩니다. 구현에 대한 추가 정보는 여기에서 확인할 수 있습니다.
Python 모듈은 discord.js 래퍼에 액세스할 수 없지만 msg.contentArray
및 msg.aRegexGroups
가져옵니다. 기본 구조는 다음과 같습니다.
import sys
msg = sys . argv [ 1 ]. split ( "," ) # Array of input parameters
regexGroups = sys . argv [ 2 ]. split ( "," ) # Array of input regex groups
# insert code to handle the input parameters here
print ( "I received these parameters: " + str ( msg )) # This will be the msg that the bot sends
print ( "These are the regex groups" + str ( regexGroups )) # This is a second message that the bot sends
sys . stdout . flush () # cleanup
보시다시피 인쇄를 통해 봇이 메시지를 보내게 됩니다.
Lua 모듈은 discord.js 래퍼에 액세스할 수 없지만 msg.contentArray
및 msg.aRegexGroups
가져옵니다. 기본 구조는 다음과 같습니다.
-- Import lua module helper for splitting strings into arrays
require " src/utils/luaUtils "
local sMessage = arg [ 1 ] -- String of input parameters
local sRegexGroups = arg [ 2 ] -- String of input regex groups
local aMessage = utils . splitString ( sMessage , " , " ) -- Array of input parameters
local aRegexGroups = utils . splitString ( sRegexGroups , " , " ) -- Array of input regex groups
-- Insert code to handle the input parameters here
-- This will be the msg that the bot sends
print ( " I received these parameters: [ " .. tostring ( aMessage [ 1 ]) .. " , " .. tostring ( aMessage [ 2 ]) .. " ] " )
-- This is a second message that the bot sends
print ( " These are the regex groups: [ " .. tostring ( aRegexGroups [ 1 ]) .. " ] " )
보시다시피 인쇄를 통해 봇이 메시지를 보내게 됩니다. 전반적인 Lua 모듈은 Python 모듈과 매우 유사합니다.
JavaScript 및 Python 모듈 모두 Hooks.json 파일에 다음과 같은 항목이 필요합니다.
"technicalHookName" : {
"type" : " js " ,
"name" : " hookName " ,
"path" : " src/js-modules/yourModule.js " ,
"channel" : 0 ,
"interval" : 10000 ,
"running" : false
}
JavaScript 모듈은 discord.js 래퍼의 채널 개체에 액세스할 수 있습니다. 모듈이 호출될 때 실행되는 코드는 Hook 함수에 속합니다.
module . exports = {
hook : function ( channel ) {
channel . send ( "This js message is automatically sent in a specific interval" ) ;
}
} ;
Hooks.json에 기존 채널이 있고 실행 중일 때 후크 기능이 실행됩니다.
Python 모듈은 채널 객체에 액세스할 수 없으며 입력을 받지 않습니다. 단지 Python 스크립트를 실행하고 인쇄를 호출할 때마다 봇 메시지가 생성됩니다. 다음과 같아야 합니다.
import sys
# insert code to handle the input parameters here
# This will be the msg that the bot sends
print ( "This py message is automatically sent in a specific interval" )
sys . stdout . flush () # cleanup
Lua 모듈은 채널 개체에 대한 액세스 권한도 없으며 입력도 받지 않습니다. 단지 lua 스크립트를 실행하고 인쇄를 호출할 때마다 봇 메시지가 생성됩니다. 다음과 같아야 합니다.
-- Insert code here
-- This will be the msg that the bot sends
print ( " This lua message is automatically sent in a specific interval. " )
이는 Python 모듈과도 유사합니다.
예, 귀하의 코드를 검토한 후 문제가 없으면 마스터에 병합하겠습니다. 기존 모듈과 관련하여 코드 스타일을 조정하십시오.
네, 그것도 괜찮습니다. 하지만 더 많은 사람들이 당신의 작업으로 이익을 얻을 수 있다면 좋을 것입니다.