맞춤형 뮤직 머신을 사용하여 Discord 게임에 재미를 더하다

Typescript를 사용하여 Discord Music 로봇을 처음부터 만드는 방법을 알고 다음 게임 세션에 음악을 들려줍니다.이 로봇은 유튜브 링크를 매개 변수로 하고 유튜브 동영상의 오디오를 재생하는 기본적인 재생과 정지 명령을 포함할 것이다.
Here's the code for the project 또는 more advanced, so called "Flötenbot".
무료 음악 로봇이 많지만 재생의 질이 매우 떨어지는 것을 발견했다. 이것은 무료 버전의 로봇에게는 충분히 이해할 수 있는 것이다.그래서 나는 왜 너 자신의 로봇을 가지지 않느냐고 생각한다.
당신의 취향에 따라 로봇을 확장할 수 있는 방법도 많습니다.대기열 생성 시스템을 추가하거나 자동 재생 기능을 추가하면 Spotify API를 사용하여 재생한 이전 노래와 유사한 노래가 대기열에 가득합니다.실제로 저는'Flφtenbot'프로젝트에서 이러한 기능을 실현했고 저와 제 친구들은 이 프로젝트를 적극적으로 사용하고 있습니다.


선결 조건


당신은 Nodejs과 당신이 선택한 패키지 관리자를 설치해야 합니다. 저는 Yarn을 사용합니다.마지막으로 코드 편집기와 Discord 계정을 선택해야 합니다.

설치 프로그램


원하는 곳에 새 폴더를 만들고 Thread/npm으로 초기화합니다.
mkdir jukebot
cd jukebot
yarn init -y

의존 관계


여기서, 나는 의존항의 수를 가능한 한 낮은 수준으로 유지하려고 했지만, 여전히 의존항이 필요하다.불화js는 Discord 로봇을 연결하는 데 사용되고 ytdl core는 유튜브 영상을 유동적으로 전송하는 데 사용되며 dotenv는 환경 변수를 불러오는 데 사용됩니다.Typescript 및 일부 유형과 함께 설치하고 기본 Typescript 구성을 만듭니다.
yarn add -D typescript @types/node @types/ws
yarn add @discordjs/opus discord-ytdl-core ytdl-core discord.js dotenv
npx tsconfig.json
그리고 src 디렉터리와 src/index.ts 파일을 만듭니다.
마지막으로 실행 코드는 스크립트가 필요합니다. 따라서 코드를 컴파일하고 실행할 스크립트가 있는지 확인하십시오.이 가능하다, ~할 수 있다,...
소포.json
{
    "name": "jukebot",
    "version": "1.0.0",
    "main": "index.js",
    "license": "MIT",
    "scripts": {
        "build": "tsc",
        "start": "node dist/index.js",
        "dev": "yarn build && yarn start"
    },
    "devDependencies": {
        "@types/node": "^14.14.22",
        "@types/ws": "^7.4.0",
        "typescript": "^4.1.3"
    },
    "dependencies": {
        "@discordjs/opus": "^0.4.0",
        "discord-ytdl-core": "^5.0.0",
        "discord.js": "^12.5.1",
        "dotenv": "^8.2.0",
        "ytdl-core": "^4.4.5"
    }
}

Discord 개발자 응용 프로그램


Discord Developer Portal으로 가서 로그인했는지 확인하세요.'응용 프로그램' 옵션으로 가서 '새 응용 프로그램' 을 누르십시오.

로봇 탭으로 이동하여 새 로봇을 만듭니다.

영패 복제 및 비밀!

Discord 클라이언트 생성


환경 변수를 저장할 파일을 만듭니다. 예를 들어bot에서 온 영패입니다.
src/config.ts
import dotenv from "dotenv"
dotenv.config()

export const TOKEN = process.env.TOKEN || ""
export const PREFIX = "_"
'접두사' 는 로봇 명령으로 사용되는 메시지를 확인하는 데 사용될 것이다.밑줄을 접두사로 하여 플레이 명령은 _play youtube.com/...처럼 보입니다.
src/index.ts
import Discord from "discord.js"
import { TOKEN } from "./config"

const client = new Discord.Client()

client.on("ready", () => {
    console.log("The bot is online")
})

client.login(TOKEN)
이것이 바로 새 Discord 클라이언트를 만들고 토큰을 사용하여 인증하는 방법입니다.너는 지금 이 코드를 실행해 볼 수 있다. 나의 예에서 명령은 yarn dev이고, 아마도 로봇은 온라인일 것이다.
마지막 부분은 메시지 처리 프로그램인데 이것은 로봇이 있는 서버에서 메시지를 보낼 때 실행되는 함수이다.새 파일을 만듭니다: src/message.ts.
우선, 이것은 메시지가bot에서 발송되지 않고, 우리가 정의한 접두사를 포함하여bot의 유효한 명령이 되도록 합니다.
다음에 메시지에서 접두사를 제거하고 빈칸으로 메시지를 구분합니다.첫 번째 항목은 당연히 명령(play,stop 등)이기 때문에args에서 꺼내 단독 변수에 넣는다.
그리고 간단한if/else에서 어떤 명령을 호출하고 있는지 검사합니다.
명령이 "play"라면,args의 첫 번째 항목은 url이어야 합니다.URL이 확실히 있는지 확인하기 위한 검증은 아직 되지 않았지만, 이것은 좋은 생각일 것이다.다른 작업을 수행하기 전에 명령을 호출한 사용자가 음성 채널에 있는지 확인합니다.그렇다면 discord-ytdl-core 라이브러리가 있는 유튜브 동영상 흐름을 만들고 로봇이 사용자와 같은 음성 채널에 가입한다.마지막으로 파이프를 통해 음성 연결에 들어가 오디오를 재생한다.
src/message.ts
import { Message } from "discord.js"
import { PREFIX } from "./config"
import ytdl from "discord-ytdl-core"

export async function onMessage(message: Message) {
    try {
        if (!message.content.startsWith(PREFIX) || message.author.bot) return

        console.log(`Received message from ${message.author.username} saying: ${message.content}`)

        const args = message.content.slice(PREFIX.length).trim().split(/ +/)
        const command = args.shift()?.toLowerCase()

        if (command === "play") {
            // play url
            const voiceChannel = message.member?.voice.channel
            if (!voiceChannel) {
                await message.channel.send("You must be in a voice channel")
                return
            }

            const url = args[0]
            const stream = ytdl(url)

            const connection = await voiceChannel.join()

            connection
                .play(stream, { type: "opus" })
                .on("error", (error) => console.log(error))
                .on("close", () => {
                    stream.destroy()
                    connection.disconnect()
                })
        } else if (command === "stop") {
            // stop
            const voiceChannel = message.member?.voice.channel
            if (!voiceChannel) {
                await message.channel.send("You must be in a voice channel")
                return
            }

            const connection = await voiceChannel.join()
            connection.disconnect()
        } else {
            await message.channel.send("Unknown command, try _play or _stop")
        }
    } catch (error) {
        console.log(error)
    }
}
.on("close") 프로세서는 방송이 끝난 후 로봇이 음성 채널을 떠나는 것을 확보한다.이것은 정지 명령과 유사하다.중지 명령은 음성 채널을 다시 확인하고 채널에 연결을 시도합니다.bot은 이미 음성 채널에 있을 것이기 때문에 이것은 어떤 일을 하는 것이 아니라 연결에 대한 인용을 제공하는 것이다.그런 다음 참조를 사용하여 채널과의 연결을 끊을 수 있습니다.
수수께끼의 마지막 부분은 이 메시지 처리 프로그램을discord 클라이언트에 연결하는 것입니다.
src/index.ts
import Discord from "discord.js"
import { TOKEN } from "./config"
import { onMessage } from "./message"

const client = new Discord.Client()

client.on("ready", () => {
    console.log("The bot is online")
})

client.on("message", onMessage)

client.login(TOKEN)
로봇이 이제 록을 준비했어요.🤘 ... 그러나 로봇은 아직 디스코드 서버에 나타나지 않았다.

초대 로봇


Discord 개발자 포털로 돌아가면 고객 ID를 찾을 수 있습니다.

이 링크의 ID: https://discord.com/oauth2/authorize?client_id=ID&scope=bot을 복사하고 바꿉니다.그리고 이 링크에 접근할 수 있습니다. 로봇을 선택한 Discord 서버에 초대할 수 있습니다.로봇을 이 서버에 초대할 수 있는 권한을 가져야 한다는 것을 기억하세요.

디스코 음악 줄 서기🎧


bot이 현재 yarn dev (내 예에서) 로 시작되었을 때,bot은 서버에서 온라인으로 보일 것입니다.
지금 Youtube에서 노래 한 곡을 찾아서 링크를 복제하고 그 중 한 Discord 텍스트 채널에서 메시지 _play LINK을 보내고 노래를 감상하세요!🎉
전문 힌트: 로봇을 오른쪽 단추로 눌러서 소리를 조절해서 소리가 너무 크거나 너무 조용하지 않도록 할 수 있다.
한동안 로컬에서 실행했지만 나중에 24/7 가동 시간과 성능을 향상시키기 위해 Digital Ocean에 배포하기로 결정했습니다.너는 Digital Ocean with my referral link달러를 통해 100달러의 시작 신용을 얻을 수 있다.5달러/월droplet에 대해 20개월 안에 bot을 위탁 관리할 수 있습니다.
디지털 오션에 이런 로봇을 배치하는 방법에 대해 알고 싶으면 메시지를 남겨주세요.
이렇게 멀리 와줘서 고마워요.❤️
나는 이제 막 시작했기 때문에, 나는 영원히 너의 공유, 사랑, 구독에 감사할 것이다.
👋

좋은 웹페이지 즐겨찾기