진정한 유저로서...

8955 단어 opensource
이번 주에 전통에 따라 새로운 것을 시도하고 싶습니다.하지만 이번에는 적어도 자바스크립트에 적응했으면 좋겠어요.나는 이 언어를 좋아한다. 나는 언어 자체의 다기능성과 일치하는 다기능 기능을 가지고 싶다.그래서 이번에 제가 하나 도와줬어요.
Discord 로봇.

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

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

위의 시범은 내가 종사하는 프로젝트인'마우스 스톱'게임에 사용되는 불협화음 로봇을 보여 주었다.

올드 울프강 / MHTimerBot 회사


Discord bot 마우스 스톱 타이머 이해


MHTimerBot 회사


Discord bot 마우스 스톱 타이머 이해

필요


오프라인에서 사용할 수 있도록 타이머를 파일, 데이터베이스 또는 기타 "정적"파일에 저장합니다.
이 타이머들의 정의는 이 형식을 확정하는 데 도움이 될 것이다
타이머가 다시 나타납니다.지속 시간.반복 주파수.일부 타이머는 다음 타이머로 바뀔 것이다. 만약 그들이 꽃무늬 - 넘침 타이머, 계절 타이머라면.아니면 지금처럼 이렇게 하면서 반복하는 거예요.
타이머는 오프라인 시간 후에 복구하는 방법이 필요하다.

명령

  • next- 이 유형의 다음 타이머와 거리를 표시하는 시간 및 메시지 내용
    - 다음 유출: 수위가 2h31m
  • 에서 아치로 상승합니다.
  • 알림 <영역>[하위 영역] [항상 | 한 번 | 중지 |] - PM을 전송하여 특정 영역의 타이머를 알림
    - 계절 알림 한 번 - 다음 타이머가 울릴 때만 알림
    - 알람 계절 겨울 1회 - 다음 타이머 시작 시에만 알람
  • View on GitHub
    나는 게임이 무엇을 필요로 하는지 상세하게 소개하지는 않겠지만, 그것은 하루 중의 특정한 시간과 일주일 중의 며칠 동안 게임의 특정한 위치에 나타난 쥐잡이를 둘러싸고 전개되는 것 같다.
    이 로봇이 해야 할 일은 어떤 마우스가 게임에 나타날 때, 자신의 채널에서 사용자에게 알림을 주고, 사용자가 마지막으로 어떤 마우스를 발견할 때 그것을 조회할 수 있도록 하는 것이다.
    issue는 다음과 같습니다.
  • 사용자가 로봇이 지난 3개월 동안 마우스의 위치를 조회하려고 시도했다
  • 로봇은 마우스 위치를 토하지만 최근 3일 동안
  • 솔루션: 정확한 시간 범위를 제공하기 위해 코드를 변경해야 합니다
  • 이것은 충분한 간단한 복구 프로그램으로, 나는 몇 줄의 코드를 바꾸는 것이 매우 어려울 것이라고 생각하지 못했다.이 문제는 디스코드 로봇을 이해할 수 있는 기회를 제공했다!그게 내 목표야.

    내 로봇 설치



    따라서 변경 사항을 테스트하기 위해서 테스트 서버에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 installnode 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"를 입력 조건으로 추가하기만 하면 됩니다. 왜냐하면 제가 전에 본 상황을 보면 이것이 우리가 원하는 것 같기 때문입니다.

    결론


    이렇게!나는 디스코드 로봇을 어떻게 설정하는지 배웠고 이 로봇의 코드를 통독하여 그것을 시작하는 가장 좋은 방식을 확정하는 것이 이번 호의 주요 목표이다.더군다나 나는 테스트 코드를 편집했다.이것은 내가 이전에 해 본 적이 없는 것이다.이번 주 즐거웠어요!나는 지체하지 않고 이런 방법을 내 자신의 프로젝트에 응용하고 싶다.

    좋은 웹페이지 즐겨찾기