kreimben / ZeroTwo_bot

Open source Discord music bot
Other
3 stars 0 forks source link
discord-bot discord-music-bot discord-py discord-py-bot music-bot music-bot-discord

ZeroTwo Bot

ZeroTwo Bot은 Discord용 오픈 소스 음악 봇입니다.

이 봇은 Python으로 작성되었으며, 사용자가 Discord 서버에서 음악을 쉽게 재생할 수 있도록 다양한 기능을 제공합니다.

image

54개 서버에서 실사용되고 있는 서비스 입니다.

image

이 프로젝트는 여러 기능을 포함하고 있으며, 그 주요 기능과 구조는 다음과 같습니다.

주요 기능

  1. 음악 재생: YouTube와 같은 플랫폼에서 음악을 검색하고 재생할 수 있습니다.
  2. 재생 목록 관리: 사용자 정의 재생 목록을 만들고 관리할 수 있습니다.
  3. 음악 제어: 일시 정지, 재개, 스킵, 정지 등의 음악 제어 기능을 제공합니다.
  4. 음악 검색: 노래 제목이나 키워드를 통해 음악을 검색할 수 있습니다.
  5. 디스코드 명령어 지원: 디스코드 채팅 창에서 다양한 명령어를 통해 봇을 제어할 수 있습니다.

프로젝트 구조

ZeroTwo_bot 이벤트 루프 사용 예시

ZeroTwo_bot 프로젝트에서 Helper.py 파일의 비동기 함수와 이벤트 루프 사용 예제를 기반으로 설명합니다. 이 봇은 Python의 discord.py 라이브러리와 비동기 프로그래밍을 사용하여 음악 재생 기능을 구현합니다.

구조도

image

image

Helper.py 코드

class MyAudio(discord.FFmpegOpusAudio):
    ...

class Player:
    def __init__(self, context: discord.ApplicationContext):
        self.play_queue = []
        self._current_playing = None
        self._is_paused = False
        self._event = asyncio.Event()
        self._context = context
        self._task = bot.loop.create_task(self._loop())

    async def _get_source(self, song) -> MyAudio:
        ...

    async def _play(self, after) -> None:
        if self.play_queue:
            next_song = self.play_queue.pop(0)
            source = await self._get_source(next_song)
            self._context.voice_client.play(source, after=after)
            self._current_playing = next_song

    async def _loop(self) -> None:
        while True:
            self._event.clear()
            if not self._context.voice_client.is_playing() and not self._is_paused:
                if self.play_queue:
                    await self._play(self._after_play)
                else:
                    await self._context.voice_client.disconnect()
            await self._event.wait()

    def _after_play(self, error=None):
        if error:
            raise Exception(str(error))
        self._event.set()

코드 설명

서버에 추가하기