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 앱에 필요한 토큰을 검색해야 합니다.
디스코드에서 애플리케이션 생성:
넌 봐야 해:
"새 애플리케이션"을 클릭하고 이름을 지정합니다.
응용 프로그램을 생성하면 로고를 업로드하고 설명을 제공하고 가장 중요한 응용 프로그램 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.
hello
및 goodbye
를 입력하면 봇이 해당 값에 응답하는 것을 볼 수 있습니다.이제 봇을 테스트했으므로
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
그러면 도움말 메시지가 표시되고 다른 항목을 테스트합니다.
자원
이 작업을 수행하는 데 정말 도움을 준 다음 작성자에게 감사합니다.
감사합니다
읽어 주셔서 감사합니다. 제 콘텐츠가 마음에 든다면 제website를 확인하거나 제newsletter를 읽거나 Twitter에서 저를 팔로우하세요.
이 봇의 소스 코드는 내 github 저장소에 저장됩니다.
저는 새로운 Discord 서버를 시작했습니다. 지금은 많은 일이 일어나지 않지만 기술 콘텐츠를 공유하고 배포할 계획이며 같은 생각을 가진 사람들이 어울릴 수 있는 장소입니다. 관심 있는 내용이 있다면 언제든지 참여하세요this link.
Reference
이 문제에 관하여(Python에서 Discord 봇 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ruanbekker/create-a-discord-bot-in-python-din텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)