댓글 검색 목록

[Python] Python으로 무료로 Discord 봇을 만드는 방법 – 전체 자습서

페이지 정보

작성자 운영자 작성일 20-12-22 16:06 조회 1,373 댓글 0

이 튜토리얼은 클라우드에서 완전히 자신 만의 Discord 봇을 구축하는 방법을 보여줍니다.


컴퓨터에 아무것도 설치할 필요가 없으며 봇을 호스팅 하기 위해 비용을 지불 할 필요가 없습니다.


Discord API, Python 라이브러리 및 Repl.it이라는 클라우드 컴퓨팅 플랫폼을 포함한 여러 도구를 사용할 것입니다.


이 문서화 된 튜토리얼의 비디오 버전도 있습니다. 비디오는 아래에 삽입되고 작성된 버전은 비디오 뒤에 있습니다.


https://www.freecodecamp.org/news/create-a-discord-bot-with-python/



Discord Bot 계정을 만드는 방법 


Python 라이브러리 및 Discord API를 사용하려면 먼저 Discord Bot 계정을 만들어야 합니다.


Discord Bot 계정을 만드는 단계는 다음과 같습니다.


  1. Discord 웹 사이트에 로그인했는지 확인하십시오.
  2. 신청 페이지로 이동합니다.
  3. "새 응용 프로그램"버튼을 클릭합니다.

image-117.png


4. 응용 프로그램에 이름을 지정하고 "만들기"를 클릭합니다.


image-118.png 


5. "봇"탭으로 이동 한 다음 "봇 추가"를 클릭합니다. "Yes, do it!"을 클릭하여 확인해야 합니다.


image-119.png 


Public Bot (선택됨) 및 Require OAuth2 Code Grant (선택 취소됨)에 대한 기본 설정을 유지합니다.


봇이 생성되었습니다. 다음 단계는 토큰을 복사하는 것입니다.


image-122.png 


이 토큰은 봇의 비밀번호이므로 누구와도 공유하지 마세요. 누군가가 귀하의 봇에 로그인하여 모든 종류의 나쁜 일을 할 수 있습니다.


실수로 공유 된 경우 토큰을 다시 생성 할 수 있습니다.


봇을 서버에 가입하도록 초대하는 방법 


이제 봇 사용자를 서버로 가져와야 합니다. 이렇게 하려면 초대 URL을 만들어야 합니다.


"OAuth2"탭으로 이동합니다. 그런 다음 "범위"섹션에서 "봇"을 선택합니다.


image-123.png 


이제 봇에 대해 원하는 권한을 선택하십시오. 우리 봇은 주로 문자 메시지를 사용하므로 많은 권한이 필요하지 않습니다. 봇이 수행하려는 작업에 따라 더 많은 것이 필요할 수 있습니다. "관리자"권한에 주의하십시오.


image-124.png 


적절한 권한을 선택한 후 권한 위에 있는 '복사'버튼을 클릭합니다. 그러면 서버에 봇을 추가하는 데 사용할 수 있는 URL이 복사 됩니다.


URL을 브라우저에 붙여 넣고 봇을 초대 할 서버를 선택한 다음 "승인"을 클릭합니다.


봇을 추가하려면 계정에 "서버 관리"권한이 필요합니다.


이제 봇 사용자를 만들었으므로 봇용 Python 코드 작성을 시작합니다.


discord.py 라이브러리로 기본 Discord 봇을 코딩하는 방법 


discord.py Python 라이브러리를 사용하여 봇용 코드를 작성합니다. discord.py는 Python에서 Discord 봇을 쉽게 만들 수 있는 Discord 용 API 래퍼입니다.


Repl을 만들고 disocrd.py를 설치하는 방법 


코드 편집기를 사용하여 로컬 컴퓨터에서 봇을 개발할 수 있습니다. 그러나 이 튜토리얼에서는 누구나 따라하기가 더 간단 해 지므로 Repl.it을 사용할 것입니다. Repl.it는 웹 브라우저에서 사용할 수 있는 온라인 IDE입니다.


Repl.it로 이동하여 시작하십시오. 새 Repl을 만들고 언어로 "Python"을 선택합니다.


discord.py 라이브러리를 사용하려면 main.py 상단에 import discord를 작성하면 됩니다. Repl.it은 "실행"버튼을 누르면 이 종속성을 자동으로 설치합니다.


봇을 로컬로 코딩하려는 경우 MacOS에서 이 명령을 사용하여 discord.py를 설치할 수 있습니다.


python3 -m pip install -U discord.py 


pip 대신 pip3을 사용해야 할 수도 있습니다.


Windows를 사용하는 경우 대신 다음 줄을 사용하십시오.


py -3 -m pip install -U discord.py 


봇에 대한 Discord 이벤트를 설정하는 방법 


discord.py는 이벤트의 개념을 중심으로 합니다. 이벤트는 사용자가 듣고 응답하는 것입니다. 예를 들어 메시지가 발생하면 응답 할 수 있는 이벤트를 받게 됩니다.

특정 메시지에 답장하는 봇을 만들어 보겠습니다. 이 간단한 봇 코드는 코드 설명과 함께 discord.py 문서에서 가져온 것입니다. 나중에 봇에 더 많은 기능을 추가 할 예정입니다.


이 코드를 main.py에 추가하십시오. (discord.py가 아니라 원하는 경우 파일 이름을 다른 이름으로 지정할 수 있습니다.)이 모든 코드가 수행하는 작업에 대해 곧 설명하겠습니다.

import discord
import os

client = discord.Client()

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('$hello'):
        await message.channel.send('Hello!')

client.run(os.getenv('TOKEN'))

Discord에서 봇 사용자를 만들 때 토큰을 복사했습니다. 이제 토큰을 저장할 .env 파일을 만들 것입니다. 코드를 로컬에서 실행하는 경우 .env 파일이 필요하지 않습니다. os.getenv ( 'TOKEN')을 토큰으로 바꾸십시오.


.env 파일은 환경 변수를 선언하는 데 사용됩니다. Repl.it에서 생성 한 대부분의 파일은 누구에게나 표시되지만 .env 파일은 나에게만 표시됩니다. 공개 repl을 보는 다른 사람들은 .env 파일의 내용을 볼 수 없습니다.


따라서 Repl.it에서 개발하는 경우 토큰이나 키와 같은 개인 정보 만 .env 파일에 포함하십시오.


"파일 추가"버튼을 클릭하고 .env라는 파일을 만듭니다.


image-19.png 


파일 안에 이전에 복사 한 실제 토큰을 포함하여 다음 행을 추가하십시오.

TOKEN=[paste token here]

이제 Discord 봇 코드에서 각 코드 행이 수행하는 작업을 살펴 ​​보겠습니다.


  1. 첫 번째 줄은 discord.py 라이브러리를 가져옵니다.
  2. 두 번째 줄은 os 라이브러리를 가져 오지만 .env 파일에서 TOKEN 변수를 가져 오는 데만 사용됩니다. .env 파일을 사용하지 않는 경우 이 줄이 필요하지 않습니다.
  3. 다음으로 클라이언트의 인스턴스를 만듭니다. 이것이 Discord와의 연결입니다.
  4. @ client.event() 데코레이터는 이벤트를 등록하는 데 사용됩니다. 이것은 비동기 라이브러리이므로 콜백으로 작업이 수행됩니다. 콜백은 다른 일이 발생할 때 호출되는 함수입니다. 이 코드에서 on_ready() 이벤트는 봇이 사용을 시작할 준비가 되면 호출됩니다. 그런 다음 봇이 메시지를 수신하면 on_message() 이벤트가 호출됩니다.
  5. on_message () 이벤트는 메시지가 수신 될 때마다 트리거 되지만 메시지가 자신이 보낸 메시지 인 경우에는 아무것도 하지 않기를 원합니다. 따라서 Message.author가 Client.user와 동일하면 코드가 반환 됩니다.
  6. 다음으로 Message.content가 '$ hello'로 시작하는지 확인합니다. 그렇다면 봇은 'Hello!'로 응답합니다. 사용 된 채널에.
  7. 이제 봇이 설정되었으므로 마지막 줄은 로그인 토큰으로 봇을 실행합니다. .env 파일에서 토큰을 가져옵니다.


봇에 대한 코드가 있으므로 이제 실행하기 만하면 됩니다.


봇 실행 방법 


이제 상단의 실행 버튼을 클릭하여 repl.it에서 봇을 실행하십시오.


로컬에서 봇을 작성하는 경우 터미널에서 다음 명령을 사용하여 봇을 실행할 수 있습니다.


Windows의 경우 :


py -3 main.py 


다른 시스템에서 :


python3 main.py 


이제 Discord 룸으로 이동하여 "$ hello"를 입력하십시오. 봇이 "Hello!"를 반환해야 합니다.


image-141.png 


봇을 개선하는 방법 


이제 기본 봇이 작동하므로 이를 개선 할 것입니다. 어떤 이유로 "봇 격려"라고 불립니다.


이 봇은 누군가가 슬프거나 우울한 단어가 포함 된 메시지를 보낼 때마다 격려의 메시지로 응답합니다.


누구나 봇이 사용할 격려 메시지를 추가 할 수 있으며 사용자가 제출 한 메시지는 Repl.it 데이터베이스에 저장됩니다.


또한 누군가가 채팅에 "$inspire"메시지를 입력하면 봇은 API에서 임의의 영감을 주는 인용문을 반환합니다.


"$inspire"기능 추가부터 시작하겠습니다.


봇에 영감을 주는 인용문을 추가하는 방법 


zenquotes.io라는 API에서 영감을 주는 인용문을 얻을 수 있습니다. Python 모듈을 몇 개 더 가져 와서 get_quote() 함수를 추가하고 함수를 호출하도록 봇 코드를 업데이트해야 합니다.


다음은 업데이트 된 코드입니다. 코드 다음에 새로운 부분을 설명하겠습니다.


import discord
import os
import requests
import json

client = discord.Client()

def get_quote():
  response = requests.get("https://zenquotes.io/api/random")
  json_data = json.loads(response.text)
  quote = json_data[0]['q'] + " -" + json_data[0]['a']
  return(quote)

@client.event
async def on_ready():
  print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
  if message.author == client.user:
    return

  if message.content.startswith('$inspire'):
    quote = get_quote()
    await message.channel.send(quote)

client.run(os.getenv('TOKEN'))

이제 요청 모듈을 가져와야 합니다. 이 모듈을 사용하면 코드가 API에서 데이터를 가져 오기 위해 HTTP 요청을 할 수 있습니다. API는 JSON을 반환하므로 json 모듈을 사용하면 반환 된 데이터를 더 쉽게 사용할 수 있습니다.


get_quote() 함수는 매우 간단합니다. 먼저 requests 모듈을 사용하여 API URL에서 데이터를 요청합니다. API는 임의의 영감을 주는 인용문을 반환합니다. 이 함수는 현재 API가 작동을 멈춘 경우 다른 API에서 따옴표를 가져 오도록 쉽게 다시 작성할 수 있습니다.


다음으로 함수 내에서 json.loads()를 사용하여 API에서 JSON으로 응답을 변환합니다. 시행 착오를 통해 JSON에서 원하는 문자열 형식으로 따옴표를 얻는 방법을 알아 냈습니다. 따옴표는 함수에서 문자열로 반환됩니다.


코드에서 업데이트 된 마지막 부분은 끝입니다. 이전에는 "$ hello"로 시작하는 메시지를 찾았습니다. 이제 "$inspire"를 찾습니다. "Hello!"를 반환하는 대신 quote = get_quote()를 사용하여 따옴표를 가져 와서 따옴표를 반환합니다.


이 시점에서 코드를 실행하고 사용해 볼 수 있습니다.


봇에 격려 메시지를 추가하는 방법 


이제 사용자가 슬픈 단어로 메시지를 게시 할 때 봇이 격려 메시지로 응답하는 기능을 구현합니다.


봇에게 슬픈 말을 추가하는 방법 


먼저 봇이 응답 할 슬픈 단어가 포함 된 Python 목록을 만들어야 합니다.


클라이언트 변수가 생성 된 후 다음 줄을 추가합니다.


sad_words = ["sad", "depressed", "unhappy", "angry", "miserable"] 


목록에 더 많은 단어를 자유롭게 추가하십시오.


봇에 격려 메시지를 추가하는 방법 


이제 봇이 응답 할 고무적인 메시지 목록을 추가합니다.


작성한 sad_words 목록 뒤에 다음 목록을 추가하십시오.


starter_encouragements = [
  "Cheer up!",
  "Hang in there.",
  "You are a great person / bot!"
]

이전과 마찬가지로 원하는 구문을 목록에 추가 할 수 있습니다. 나중에 사용자가 봇이 사용할 고무적인 문구를 더 추가 할 수 있는 기능을 추가 할 것이기 때문에 지금은 세 가지 항목 만 사용하고 있습니다.


메시지에 응답하는 방법 


이제 우리가 만든 두 목록을 사용하도록 봇을 업데이트 해야 합니다. 먼저 봇이 격려 메시지를 무작위로 선택하므로 무작위 모듈을 가져옵니다. 코드 맨 위에 있는 import 문에 다음 줄을 추가합니다. import random.


이제 on_message() 함수를 업데이트하여 모든 메시지에 sad_words 목록의 단어가 포함되어 있는지 확인합니다. 슬픈 단어가 발견되면 봇은 무작위로 격려의 메시지를 보냅니다.


다음은 업데이트 된 코드입니다.


async def on_message(message):
  if message.author == client.user:
    return

  msg = message.content

  if msg.startswith('$inspire'):
    quote = get_quote()
    await message.channel.send(quote)
    
  if any(word in msg for word in sad_words):
    await message.channel.send(random.choice(starter_encouragements))

봇을 테스트하기에 좋은 시기입니다. 이제 자신의 봇을 만들 만큼 충분히 알고 있습니다. 그러나 다음으로 Repl.it 데이터베이스를 사용하여 고급 기능을 구현하고 데이터를 저장하는 방법을 배웁니다.


사용자가 제출 한 메시지를 활성화하는 방법 


봇은 완전히 작동하지만 이제 Discord에서 바로 봇을 업데이트 할 수 있습니다. 사용자는 봇이 슬픈 단어를 감지 할 때 사용할 수 있도록 더 많은 격려 메시지를 추가 할 수 있어야 합니다.


Repl.it의 내장 데이터베이스를 사용하여 사용자가 제출 한 메시지를 저장할 것입니다. 이 데이터베이스는 모든 복제에 내장 된 키-값 저장소입니다.


코드 상단의 다른 import 문 아래에서 from replit import db를 추가합니다. 이렇게 하면 Repl.it 데이터베이스를 사용할 수 있습니다.


사용자는 봇이 Discord 채팅에서 직접 사용할 수 있도록 사용자 지정 권장 메시지를 추가 할 수 있습니다. 봇에 대한 새 명령을 추가하기 전에 사용자 지정 메시지를 데이터베이스에 추가하고 삭제하는 두 개의 도우미 함수를 만들어 보겠습니다.


get_quote() 함수 뒤에 다음 코드를 추가합니다.


def update_encouragements(encouraging_message):
  if "encouragements" in db.keys():
    encouragements = db["encouragements"]
    encouragements.append(encouraging_message)
    db["encouragements"] = encouragements
  else:
    db["encouragements"] = [encouraging_message]

def delete_encouragment(index):
  encouragements = db["encouragements"]
  if len(encouragements) > index:
    del encouragements[index]
  db["encouragements"] = encouragements

update_encouragements() 함수는 격려 메시지를 인수로 받습니다.


먼저 "장려"가 데이터베이스의 키인지 확인합니다. 그렇다면 이미 데이터베이스에 있는 권장 목록을 가져 와서 새 항목을 목록에 추가 한 다음 업데이트 된 목록을 "encouragements"키 아래의 데이터베이스에 다시 저장합니다.


데이터베이스에 "장려"가 아직 포함되지 않은 경우 해당 이름의 새 키가 생성되고 새 격려 메시지가 목록의 첫 번째 요소로 추가됩니다.


delete_encouragement() 함수는 인덱스를 인수로 받습니다.


"장려"키 아래에 저장된 데이터베이스에서 장려 목록을 가져옵니다. 장려 목록의 항목 수가 색인보다 많으면 해당 색인의 목록 항목이 삭제됩니다.


마지막으로 업데이트 된 목록은 "장려"키 아래의 데이터베이스에 다시 저장됩니다.


다음은 on_message() 함수의 업데이트 된 코드입니다. 코드 다음에 새로운 섹션을 설명하겠습니다.


async def on_message(message):
  if message.author == client.user:
    return

  msg = message.content
 
  if msg.startswith("$inspire"):
    quote = get_quote()
    await message.channel.send(quote)

  options = starter_encouragements
  if "encouragements" in db.keys():
    options = options + db["encouragements"]

  if any(word in msg for word in sad_words):
    await message.channel.send(random.choice(options))

  if msg.startswith("$new"):
    encouraging_message = msg.split("$new ",1)[1]
    update_encouragements(encouraging_message)
    await message.channel.send("New encouraging message added.")

  if msg.startswith("$del"):
    encouragements = []
    if "encouragements" in db.keys():
      index = int(msg.split("$del",1)[1])
      delete_encouragment(index)
      encouragements = db["encouragements"]
    await message.channel.send(encouragements)

위의 첫 번째 새 코드 줄은 options = starter_encouragements입니다. 봇이 보낼 임의의 메시지를 선택하기 전에 사용자가 제출 한 메시지를 해당 목록에 추가 할 것이므로 starter_encouragements의 복사본을 만듭니다.


"권장"이 이미 데이터베이스 키에 있는지 확인합니다 (사용자가 하나 이상의 사용자 지정 메시지를 제출했음을 의미 함). 그렇다면, 스타터 권장 사항에 사용자 메시지를 추가합니다.


그런 다음 starter_encouragements에서 임의의 메시지를 보내는 대신 봇은 이제 옵션에서 임의의 메시지를 보냅니다.


다음 새 코드 섹션은 새 사용자 제출 메시지를 데이터베이스에 추가하는 데 사용됩니다. Discord 메시지가 "$ new"로 시작하면 "$ new"뒤의 텍스트가 새로운 격려 메시지로 사용됩니다.


코드 msg.split ( "$ new", 1) [1]은 "$ new"명령에서 메시지를 분리하고 메시지를 변수에 저장합니다. 해당 코드 줄에서 "$ new"의 공백을 기록해 둡니다. 우리는 공간 이후의 모든 것을 원합니다.


새 메시지로 update_encouragements 도우미 함수를 호출 한 다음 봇이 discord 채팅에 메시지가 추가되었음을 확인하는 메시지를 보냅니다.


세 번째 새 섹션 (위 코드 끝에 있음)은 새 Discord 메시지가 "$ del"로 시작하는지 확인합니다. 데이터베이스의 "권장 사항"목록에서 항목을 삭제하는 명령입니다.


먼저 격려라는 새 변수가 빈 배열로 초기화됩니다. 그 이유는 데이터베이스에 "장려"키가 포함되어 있지 않으면 이 코드 섹션에서 빈 배열로 메시지를 보내기 때문입니다.


"encouragement"키가 데이터베이스에 있으면 "$del"로 시작하는 Discord 메시지에서 인덱스가 분리됩니다. 그런 다음 delete_encouragement() 함수가 호출되어 삭제할 인덱스를 전달합니다. 업데이트 된 격려 목록이 격려 변수에 로드 되고 봇은 현재 목록과 함께 Discord에 메시지를 보냅니다.


최종 봇 기능 


봇이 작동해야 하므로 테스트하기에 좋은 시기입니다. 이제 몇 가지 최종 기능을 추가합니다.


Discord에서 사용자가 제출 한 메시지 목록을 바로 가져 오는 기능을 추가하고 봇이 슬픈 단어에 응답하는지 여부를 끄고 켤 수 있는 기능을 추가 할 것입니다.


프로그램의 최종 코드 전체를 알려 드리고 코드 아래에서 업데이트에 대해 논의하겠습니다.


import discord
import os
import requests
import json
import random
from replit import db

client = discord.Client()

sad_words = ["sad", "depressed", "unhappy", "angry", "miserable"]

starter_encouragements = [
  "Cheer up!",
  "Hang in there.",
  "You are a great person / bot!"
]

if "responding" not in db.keys():
  db["responding"] = True

def get_quote():
  response = requests.get("https://zenquotes.io/api/random")
  json_data = json.loads(response.text)
  quote = json_data[0]["q"] + " -" + json_data[0]["a"]
  return(quote)

def update_encouragements(encouraging_message):
  if "encouragements" in db.keys():
    encouragements = db["encouragements"]
    encouragements.append(encouraging_message)
    db["encouragements"] = encouragements
  else:
    db["encouragements"] = [encouraging_message]

def delete_encouragment(index):
  encouragements = db["encouragements"]
  if len(encouragements) > index:
    del encouragements[index]
  db["encouragements"] = encouragements

@client.event
async def on_ready():
  print("We have logged in as {0.user}".format(client))

@client.event
async def on_message(message):
  if message.author == client.user:
    return

  msg = message.content

  if msg.startswith("$inspire"):
    quote = get_quote()
    await message.channel.send(quote)

  if db["responding"]:
    options = starter_encouragements
    if "encouragements" in db.keys():
      options = options + db["encouragements"]

    if any(word in msg for word in sad_words):
      await message.channel.send(random.choice(options))

  if msg.startswith("$new"):
    encouraging_message = msg.split("$new ",1)[1]
    update_encouragements(encouraging_message)
    await message.channel.send("New encouraging message added.")

  if msg.startswith("$del"):
    encouragements = []
    if "encouragements" in db.keys():
      index = int(msg.split("$del",1)[1])
      delete_encouragment(index)
      encouragements = db["encouragements"]
    await message.channel.send(encouragements)

  if msg.startswith("$list"):
    encouragements = []
    if "encouragements" in db.keys():
      encouragements = db["encouragements"]
    await message.channel.send(encouragements)
    
  if msg.startswith("$responding"):
    value = msg.split("$responding ",1)[1]

    if value.lower() == "true":
      db["responding"] = True
      await message.channel.send("Responding is on.")
    else:
      db["responding"] = False
      await message.channel.send("Responding is off.")

client.run(os.getenv("TOKEN"))

코드에 추가 된 첫 번째 섹션은 starter_encouragements 목록 바로 아래에 있습니다.


if "responding" not in db.keys():
  db["responding"] = True

데이터베이스에 "응답"이라는 새 키를 만들고 "참"으로 설정합니다. 이를 사용하여 봇이 슬픈 말에 응답해야 하는지 여부를 결정합니다. 프로그램 실행이 중지 된 후에도 데이터베이스가 저장되기 때문에 새 키가 아직 존재하지 않는 경우에만 생성합니다.


코드의 다음 새로운 부분은 슬픈 단어에 응답하는 섹션이 이제 if 문 : if db [ "responding"] : 안에 있다는 것입니다. 봇은 db [ "responding"] = True 인 경우에만 슬픈 단어에 응답합니다. 이 값을 업데이트하는 기능은 이 다음 섹션 이후에 제공됩니다.


다음으로, 봇이 "$ del"명령에 응답하도록 하는 코드 다음에 Discord 메시지로 전송 될 때 "$ list"명령에 응답하는 새 코드가 있습니다.


이 섹션은 격려라는 빈 목록을 만드는 것으로 시작합니다. 그런 다음 데이터베이스에 이미 권장 사항이 있는 경우 해당 권장 사항이 방금 만든 빈 목록을 대체합니다.


마지막으로 봇은 격려 목록을 Discord 메시지로 보냅니다.


마지막 새 섹션이 다음으로 나옵니다. 이 코드는 봇이 "$responding"명령에 응답하도록 합니다. 이 명령은 "true"또는 "false"의 인수를 사용합니다. 다음은 사용 예입니다. "$responding true".


코드는 먼저 value = msg.split ( "$ responding", 1) [1] (이전과 마찬가지로 "$ responding"의 공백에 유의)으로 인수를 가져옵니다. 그런 다음 데이터베이스에 "응답"키를 적절하게 설정하고 알림 메시지를 Discord로 다시 보내는 if / else 문이 있습니다. 인수가 "true"가 아닌 경우 코드는 "false"로 간주합니다.


봇 코드가 완성되었습니다! 이제 봇을 실행하고 사용해 볼 수 있습니다. 그러나 다음에 논의 할 중요한 단계가 하나 더 있습니다.


봇이 지속적으로 실행되도록 설정하는 방법 


repl.it에서 봇을 실행 한 다음 실행 중인 탭을 닫으면 봇의 실행이 중지됩니다.


그러나 해결 방법이 있습니다. Repl.it은 탭이 닫힌 후에도 웹 서버를 계속 실행합니다. 그러나 웹 서버조차도 사용하지 않고 최대 1 시간 동안 만 실행됩니다.


repl.it 문서가 말하는 내용은 다음과 같습니다.


배포 된 후에는 브라우저 탭을 닫은 후에도 서버가 백그라운드에서 계속 실행됩니다. 서버는 마지막 요청 후 1 시간이 지나면 절전 단계로 들어갑니다. 잠자는 repls는 다른 요청을 받는 즉시 깨어납니다. repl을 다시 실행할 필요가 없습니다. 그러나 서버를 변경 한 경우 해당 변경 사항이 라이브 버전에 반영되었는지 확인하려면 repl을 다시 시작해야 합니다. 


Repl.it은 앞으로 수면 단계에 들어 가지 않고도 코드를 지속적으로 실행할 수 있는 유료 요금제를 제공 할 것이라고 발표했습니다. 그러나 그들은 이 글을 쓰는 시점에서 그 기능을 제공하지 않습니다.


이것이 구현 될 때까지 봇을 1 시간 이상 실행하는 또 다른 방법이 있습니다. 그리고 이 방법은 repl.it의 프리 티어에서 작동합니다.


봇을 지속적으로 실행하기 위해 https://uptimerobot.com//에서 Uptime Robot이라는 또 다른 무료 서비스를 사용할 것입니다.


Uptime Robot은 5 분마다 repl.it에서 봇의 웹 서버를 ping하도록 설정할 수 있습니다. 지속적인 핑을 통해 봇은 수면 단계에 들어 가지 않고 계속 실행됩니다.


따라서 봇이 지속적으로 실행되도록 하려면 두 가지 작업을 더해야 합니다.


  1. repl.it에서 웹 서버를 만들고
  2. 웹 서버를 지속적으로 핑하도록 Uptime Robot을 설정합니다.

repl.it에서 웹 서버를 만드는 방법 


웹 서버를 만드는 것은 생각보다 간단합니다.


이를 위해 프로젝트에서 keep_alive.py라는 새 파일을 생성합니다.


그런 다음 다음 코드를 추가하십시오.


from flask import Flask
from threading import Thread

app = Flask('')

@app.route('/')
def home():
    return "Hello. I am alive!"

def run():
  app.run(host='0.0.0.0',port=8080)

def keep_alive():
    t = Thread(target=run)
    t.start()

이 코드에서는 Flask를 사용하여 웹 서버를 시작합니다. 서버는 "Hello. I am alive"를 반환합니다. 그것을 방문하는 모든 사람에게. 서버는 봇과는 별도의 스레드에서 실행됩니다. 나머지는 우리 봇과 실제로 관련이 없기 때문에 여기서 모든 것을 논의하지는 않을 것입니다.


이제 이 웹 서버를 실행하려면 봇만 있으면 됩니다.


서버를 가져 오려면 main.py 상단에 다음 줄을 추가합니다.


from keep_alive import keep_alive

main.py가 실행될 때 웹 서버를 시작하려면 봇이 실행되기 직전에 두 번째에서 마지막 줄로 다음 줄을 추가합니다.


keep_alive() 


이 코드를 추가 한 후 repl.it에서 봇을 실행하면 새로운 웹 서버 창이 열립니다. 웹 서버용으로 표시된 URL이 있습니다. 다음 섹션에서 사용할 수 있도록 URL을 복사합니다.


image-20.png 



가동 시간 로봇 설정 방법 


이제 5 분마다 웹 서버를 ping하도록 Uptime Robot을 설정해야 합니다. 이렇게 하면 봇이 계속 실행됩니다.


https://uptimerobot.com/에서 무료 계정을 만드십시오.


계정에 로그인 한 후 "새 모니터 추가"를 클릭하십시오.


image-21.png 


새 모니터의 경우 모니터 유형으로 "HTTP (s)"를 선택하고 원하는 이름을 지정합니다. 그런 다음 repl.it에서 웹 서버의 URL을 붙여 넣으십시오. 마지막으로 "모니터 생성"을 클릭합니다.


image-22.png 


끝났습니다! 이제 봇이 지속적으로 실행되어 사람들이 항상 Repl.it에서 상호 작용할 수 있습니다.


결론 


이제 Python으로 Discord 봇을 만들고 클라우드에서 지속적으로 실행하는 방법을 알게 되었습니다.


discord.py 라이브러리가 할 수 있는 다른 많은 것들이 있습니다. 따라서 Discord 봇에 더 많은 기능을 제공하려면 다음 단계는 discord.py에 대한 문서를 확인하는 것입니다.



댓글목록 0

등록된 댓글이 없습니다.

웹학교 로고

온라인 코딩학교

코리아뉴스 2001 - , All right reserved.