Python에서 Discord 봇 만들기

이 자습서에서는 Python을 사용하여 자체Discord 봇을 개발합니다.

이 봇의 소스 코드는 내github repository에 저장됩니다.

봇에 대하여



먼저 메시지 발신자를 맞이할 기본 디스코드 봇을 만든 다음 다음을 수행할 수 있는 Minecraft 봇을 만듭니다.

:: Bot Usage ::
!mc help : shows help
!mc serverusage : shows system load in percentage
!mc serverstatus : shows if the server is online or offline
!mc whoisonline : shows who is online at the moment



그것에 들어가자.

종속성



Python 가상 환경을 만들고 종속 패키지를 설치합니다.

$ python3 -m virtualenv .venv
$ source .venv/bin/activate
$ pip install discord
$ pip install python-dotenv



Discord 애플리케이션 만들기



먼저 discord에서 애플리케이션을 생성하고 Python 앱에 필요한 토큰을 검색해야 합니다.

디스코드에서 애플리케이션 생성:
  • https://discordapp.com/developers/applications

  • 넌 봐야 해:

    "새 애플리케이션"을 클릭하고 이름을 지정합니다.

    응용 프로그램을 생성하면 로고를 업로드하고 설명을 제공하고 가장 중요한 응용 프로그램 ID와 공개 키를 얻는 화면이 나타납니다.



    그런 다음 봇 섹션을 선택합니다.

    그런 다음 "봇 추가"를 선택합니다.

    OAuth2를 선택하고 "봇"범위를 선택합니다.

    페이지 하단에 다음과 같은 URL이 표시됩니다.

    https://discord.com/api/oauth2/authorize?client_id=xxxxxxxxxxx&permissions=0&scope=bot
    
    


    브라우저에 링크를 붙여넣고 선택한 서버에 봇을 인증합니다.



    그런 다음 승인을 클릭하면 봇이 Discord에 나타나는 것을 볼 수 있습니다.



    Discord 봇 개발



    이제 우리는 python discord 봇을 구축할 것입니다. "Bot"섹션으로 돌아가서 "Reset Token"을 선택한 다음 토큰 값을 복사하여 파일.env에 저장합니다.

    DISCORD_TOKEN=xxxxxxxxx
    
    


    따라서 현재 작업 디렉토리에는 다음 내용이 포함된 파일.env이 있어야 합니다.

    $ cat .env
    DISCORD_TOKEN=your-unique-token-value-will-be-here
    
    


    이 데모에서는 discord에서 minecraft-test라는 비공개 채널을 만들고 채널에 봇MinecraftBot을 추가합니다(이는 테스트용일 뿐이며 테스트 후에는 다른 사람들이 사용할 수 있도록 다른 채널에 봇을 추가할 수 있습니다) :



    첫 번째 테스트의 경우 hello를 입력하고 봇이 mc_discord_bot.py 파일에 사용자 이름으로 인사해야 하는 기본 봇입니다.

    import discord
    import os
    from dotenv import load_dotenv
    
    BOT_NAME = "MinecraftBot"
    
    load_dotenv()
    DISCORD_TOKEN = os.getenv("DISCORD_TOKEN")
    
    bot = discord.Client()
    
    @bot.event
    async def on_ready():
        print(f'{bot.user} has logged in.')
    
    @bot.event
    async def on_message(message):
        if message.author == bot.user:
            return
        if message.content == 'hello':
            await message.channel.send(f'Hey {message.author}')
        if message.content == 'goodbye':
            await message.channel.send(f'Goodbye {message.author}')
    
    bot.run(DISCORD_TOKEN)
    
    


    그런 다음 봇을 실행합니다.

    $ python mc_discord_bot.py
    MinecraftBot has logged in.
    
    

    hellogoodbye를 입력하면 봇이 해당 값에 응답하는 것을 볼 수 있습니다.



    이제 봇을 테스트했으므로 mc_discord_bot.py를 지우고 마인크래프트 봇을 작성할 수 있습니다. 이 봇의 요구 사항은 간단하지만 다음을 원합니다.
  • 명령!mc을 사용하여 원하는 항목
  • 에 대한 봇 및 하위 명령을 트리거합니다.
  • 현재 서버에서 누가 마인크래프트를 플레이하고 있는지 확인할 수 있습니다
  • .
  • 마인크래프트 서버가 온라인 상태인 경우 상태를 가져올 수 있음
  • 서버 로드 비율을 얻을 수 있습니다(봇이 마인크래프트 서버에서 실행될 때)

  • 이것은 우리의 완전한 것입니다 mc_discord_bot.py:

    import discord
    from discord.ext import commands
    import requests
    import os
    from dotenv import load_dotenv
    import random
    import multiprocessing
    
    # Variables
    BOT_NAME = "MinecraftBot"
    load_dotenv()
    DISCORD_TOKEN = os.getenv("DISCORD_TOKEN")
    
    minecraft_server_url = "lightmc.fun" # this is just an example, and you should use your own minecraft server
    
    bot_help_message = """
    :: Bot Usage ::
    `!mc help` : shows help
    `!mc serverusage` : shows system load in percentage
    `!mc serverstatus` : shows if the server is online or offline
    `!mc whoisonline` : shows who is online at the moment
    """
    
    available_commands = ['help', 'serverusage', 'serverstatus', 'whoisonline']
    
    # Set the bot command prefix
    bot = commands.Bot(command_prefix="!")
    
    # Executes when the bot is ready
    @bot.event
    async def on_ready():
        print(f'{bot.user} succesfully logged in!')
    
    # Executes whenever there is an incoming message event
    @bot.event
    async def on_message(message):
        print(f'Guild: {message.guild.name}, User: {message.author}, Message: {message.content}')
        if message.author == bot.user:
            return
    
        if message.content == '!mc':
            await message.channel.send(bot_help_message)
    
        if 'whosonline' in message.content:
            print(f'{message.author} used {message.content}')
        await bot.process_commands(message)
    
    # Executes when the command mc is used and we trigger specific functions
    # when specific arguments are caught in our if statements
    @bot.command()
    async def mc(ctx, arg):
        if arg == 'help':
            await ctx.send(bot_help_message)
    
        if arg == 'serverusage':
            cpu_count = multiprocessing.cpu_count()
            one, five, fifteen = os.getloadavg()
            load_percentage = int(five / cpu_count * 100)
            await ctx.send(f'Server load is at {load_percentage}%')
    
        if arg == 'serverstatus':
            response = requests.get(f'https://api.mcsrvstat.us/2/{minecraft_server_url}').json()
            server_status = response['online']
            if server_status == True:
                server_status = 'online'
            await ctx.send(f'Server is {server_status}')
    
        if arg == 'whoisonline':
            response = requests.get('https://api.mcsrvstat.us/2/{minecraft_server_url}').json()
            players_status = response['players']
            if players_status['online'] == 0:
                players_online_message = 'No one is online'
            if players_status['online'] == 1:
                players_online_username = players_status['list'][0]
                players_online_message = f'1 player is online: {players_online_username}'
            if players_status['online'] > 1:
                po = players_status['online']
                players_online_usernames = players_status['list']
                joined_usernames = ", ".join(players_online_usernames)
                players_online_message = f'{po} players are online: {joined_usernames}'
            await ctx.send(f'{players_online_message}')
    
    bot.run(DISCORD_TOKEN)
    
    


    이제 봇을 시작할 수 있습니다.

    $ python mc_discord_bot.py
    
    


    그리고 도움말 명령을 실행할 수 있습니다.

    !mc help
    
    


    그러면 도움말 메시지가 표시되고 다른 항목을 테스트합니다.



    자원



    이 작업을 수행하는 데 정말 도움을 준 다음 작성자에게 감사합니다.
  • www.freecodecamp.org
  • betterprogramming.pub


  • 감사합니다



    읽어 주셔서 감사합니다. 제 콘텐츠가 마음에 든다면 제website를 확인하거나 제newsletter를 읽거나 Twitter에서 저를 팔로우하세요.

    이 봇의 소스 코드는 내 github 저장소에 저장됩니다.
  • github.com/ruanbekker

  • 저는 새로운 Discord 서버를 시작했습니다. 지금은 많은 일이 일어나지 않지만 기술 콘텐츠를 공유하고 배포할 계획이며 같은 생각을 가진 사람들이 어울릴 수 있는 장소입니다. 관심 있는 내용이 있다면 언제든지 참여하세요this link.

    좋은 웹페이지 즐겨찾기