진정한 유저로서...
8955 단어 opensource
Discord 로봇.

초보자에게 Discord는 느슨한 채팅 플랫폼으로 서버와 채널을 이용한다.

Discord bot은 서버의 프로그래밍 가능한 사용자로 명령을 내릴 때 일부 정보를 표시합니다.주어진 명령행 인터페이스와 다릅니다.

위의 시범은 내가 종사하는 프로젝트인'마우스 스톱'게임에 사용되는 불협화음 로봇을 보여 주었다.
올드 울프강 / MHTimerBot 회사
Discord bot 마우스 스톱 타이머 이해
MHTimerBot 회사
Discord bot 마우스 스톱 타이머 이해
필요
오프라인에서 사용할 수 있도록 타이머를 파일, 데이터베이스 또는 기타 "정적"파일에 저장합니다.
이 타이머들의 정의는 이 형식을 확정하는 데 도움이 될 것이다
타이머가 다시 나타납니다.지속 시간.반복 주파수.일부 타이머는 다음 타이머로 바뀔 것이다. 만약 그들이 꽃무늬 - 넘침 타이머, 계절 타이머라면.아니면 지금처럼 이렇게 하면서 반복하는 거예요.
타이머는 오프라인 시간 후에 복구하는 방법이 필요하다.
명령
- 다음 유출: 수위가 2h31m
- 계절 알림 한 번 - 다음 타이머가 울릴 때만 알림
- 알람 계절 겨울 1회 - 다음 타이머 시작 시에만 알람
나는 게임이 무엇을 필요로 하는지 상세하게 소개하지는 않겠지만, 그것은 하루 중의 특정한 시간과 일주일 중의 며칠 동안 게임의 특정한 위치에 나타난 쥐잡이를 둘러싸고 전개되는 것 같다.
이 로봇이 해야 할 일은 어떤 마우스가 게임에 나타날 때, 자신의 채널에서 사용자에게 알림을 주고, 사용자가 마지막으로 어떤 마우스를 발견할 때 그것을 조회할 수 있도록 하는 것이다.
issue는 다음과 같습니다.
내 로봇 설치

따라서 변경 사항을 테스트하기 위해서 테스트 서버에discordbot을 설정해야 명령을 내릴 수 있습니다.분명히 첫 번째 단계는 로봇을 만드는 것이다.
그 후에 나는 로봇 영패를 잡고 내 설정에 넣기만 하면 된다.json
설치.json
{
"token": "<token>",
"bitly_token": "",
"linkConversionChannel": "larrys-freebies",
"timedAnnouncementChannels": {},
"relic_hunter_webhook": "283571156236107777",
"botPrefix": "-mh",
"owner": "0",
"reactions": {
"success": "✅",
"failure": "❌",
"errorSequence": [
"🤖",
"💣",
"💥"
]
},
"guilds": {
"772109745703616524": {
"timedAnnouncementChannels": [
"timers"
],
"linkConversionChannel": "larrys-freebies",
"botPrefix": "-mh"
}
},
"version": "1.00"
그 후에 로봇 사용자를 제 서버에 초대해야 합니다.Discord는 이것을 매우 쉽게 만든다. 왜냐하면 나는 나의 로봇에 대한 링크를 생성하고 그것을 나의 서버의 초대장에 삽입할 수 있기 때문이다.
일단 로봇이 들어오면
npm install
과node MHTimer.js
만 운행하면 시작합니다!

만약 다른 사람들이 로봇 구축에 흥미가 있다면,discordpy의 최단 버전tutorial을 참고할 것을 건의합니다.io.
작업
물론 다음은 실제 인코딩이다.내가 전에 말한 바와 같이, 이것은 결코 완전히 어려운 것이 아니라, 단지 몇 줄만 바꾸면 된다.
원래 getFilter() 함수
function getFilter(tester) {
// Process filter-y nicknames
if (!tester)
return;
tester = `${tester}`;
if (tester.startsWith('3'))
tester = '3_days';
else if (tester.startsWith('all'))
tester = 'alltime';
else if (tester === 'current') {
tester = '1_month';
for (const filter of filters) {
if (filter.start_time && !filter.end_time && filter.code_name !== tester) {
tester = filter.code_name;
break;
}
}
}
return getSearchedEntity(tester, filters)[0];
}
위에서 보듯이 사용자가 시작할 때'3'이 있는 내용을 입력할 때 테스트 기기는 기본적으로'3_일'이기 때문에 마지막 3일만 얻을 수 있습니다. (위의 설명 참조)그럼 우리 어떡하지?이것은 매우 간단하다.3개월과 3일을 구분하고 싶기 때문에if문장을pick으로 변경하기만 하면 됩니다.새 getFilter() 함수 세그먼트
if (tester.startsWith('3_d'))
tester = '3_days';
else if (tester.startsWith('3_m'))
tester = '3_months';
이 간단한 변경을 통해 우리는 로봇에게 3일 3개월의 시간을 주고 정확한 출력을 얻을 수 있다!
너무 좋아요.지금 우리는 코드 변경을 완성했습니다. 실행합시다 pull request

아, 아니야!우리가 뭘 놓쳤나 봐!우리의 테스트를 봅시다.
테스트 발췌문
suite.test('given string input - returns known shortcuts', t => {
const inputs = [
{ input: '3', expected: '3_days' },
{ input: '3day', expected: '3_days' },
{ input: 'all', expected: 'alltime' },
{ input: 'allowance', expected: 'alltime' },
{ input: 'current', expected: '1_month' }, //NOTE this can only be asserted because we don't load the filter list
];
지금 보니, 우리는 위의 코드 세션에서'3'='3_일'을 변경했는데, 테스트가 효과가 없습니다!불행히도 테스트에 대한 변경이 필요합니다.아니면 내 약속이 바뀌어야 할지도 몰라.어쨌든, 나는 내가 나쁜 코드나 어떤 것도 가지고 있다고 생각하지 않는다.나는 환매 관리자가 이에 대해 어떤 의견을 가지고 있는지 기다리고 있을 것이라고 생각한다.응답

우리 미션 있나봐!테스트 파일을 업데이트합시다.
새로운 테스트 세션
suite.test('given string input - returns known shortcuts', t => {
const inputs = [
{ input: '3_d', expected: '3_days' },
{ input: '3days', expected: '3_days' },
{ input: '3_m', expected: '3_months' },
{ input: '3months', expected: '3_months' },
{ input: 'all', expected: 'alltime' },
{ input: 'allowance', expected: 'alltime' },
{ input: 'current', expected: '1_month' }, //NOTE this can only be asserted because we don't load the filter list
];
보시다시피 저는 방금 저의 새로운 테스트 조건에 가입했습니다. 출발합니다!이것은 우리의 전부이고, 이것은 문제이기 때문에, 나는 이 부탁이 매우 기쁘다.
...보아하니 그들도 마찬가지다.얼마나 좋은 결말이냐.
나는 나의 코드에 아직 약간의 변화가 있다는 것을 주의해야 한다.
if (tester.startsWith('3_d') || tester.startsWith('3d'))
tester = '3_days';
else if (tester.startsWith('3_m') || tester.startsWith('3m'))
tester = '3_months';
"3days"/"3months"또는 "3d"/"3m"를 입력 조건으로 추가하기만 하면 됩니다. 왜냐하면 제가 전에 본 상황을 보면 이것이 우리가 원하는 것 같기 때문입니다.결론
이렇게!나는 디스코드 로봇을 어떻게 설정하는지 배웠고 이 로봇의 코드를 통독하여 그것을 시작하는 가장 좋은 방식을 확정하는 것이 이번 호의 주요 목표이다.더군다나 나는 테스트 코드를 편집했다.이것은 내가 이전에 해 본 적이 없는 것이다.이번 주 즐거웠어요!나는 지체하지 않고 이런 방법을 내 자신의 프로젝트에 응용하고 싶다.
Reference
이 문제에 관하여(진정한 유저로서...), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/fluentinstroll/as-a-real-gamer-256b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)