일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 더 지니어스 양면포커
- suffix return type
- std::endl
- std::cout
- new&delete
- placement new
- pointer to member data
- increment operator
- virtual function
- vector capacity
- std::ostream
- delete function
- diamond inheritance
- base from member
- virtual destructor
- virtual inheritance
- conversion constructor
- c++ basic practice
- constructor
- dynamic_cast
- c++ multi chatting room
- return by reference
- discord bot
- this call
- virtual function table
- vector size
- C++
- std::vector
- member function pointer
- operator overloading
- Today
- Total
I'm FanJae.
[EA FC Pro club Draft Bot] 3. Discord 패키지 추가 및 봇 실행 본문
[EA FC Pro club Draft Bot] 3. Discord 패키지 추가 및 봇 실행
FanJae 2024. 9. 1. 17:461. Discord 패키지 추가
pip install discord
- 위 명령으로 설치를 진행했으나 아래와 같은 오류가 발생하였다.
AttributeError : module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?
- Stack overflow에서 확인한 글에 따르면, pkgutil.Implmporter 클래스가 제거되었다고 한다.
- 이에 따라 pip 수동 설치가 필요하다고 한다.
python -m ensurepip --upgrade
python -m pip install --upgrade setuptools
setuptools python -m pip install <module>
- <module>에 디스코드를 입력하여 설치해준다.
2. 기본 봇 생성
2-1. main.py 작성
import discord
from discord.ext import commands
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix='!', intents=intents)
@bot.event
async def on_ready():
print(f'Logged in as {bot.user.name} ({bot.user.id})')
await bot.change_presence(status=discord.Status.online, activity=discord.Game(name="Test"))
bot.run('BOT_TOKEN')
Intents = discord.Intents.default()
- Intents 는 Discord API와의 상호작용을 설정한다.
- Intents.default()는 기본 설정을 사용하여 메시지 및 서버 이벤트에 접근할 수 있도록 한다.
Intents.message_content = True
- 이 옵션은 봇이 메시지를 수신하고 처리할 수 있게 한다.
bot = commands.Bot(command_prefix='!', intents=intents)
- 봇의 인스턴스를 생성한다.
- command_prefix='!'는 봇이 명령어를 인식할때 사용하는 접두사이다.
- intents를 봇에 적용해준다.
@bot.event
- Discord 이벤트 처리를 하는 함수를 정의한다.
- on_ready는 봇이 준비가 완료되었을때 호출되는 이벤트 핸들러이다.
- 봇이 Discord 서버에 성공적으로 연결되면 이 함수가 실행된다.
await bot.change_presence(status=discord.Status.online, activity=discord.Game(name="Test"))
- 봇의 상태를 온라인으로 설정한다.
- 현재 활동을 'Test'로 설정한다. Discord 사용자들이 봇의 현재 상태를 볼 수 있도록 해준다.
bot.run('BOT_TOKEN')
- 봇을 실행하는 명령어
- Discord API와 연결하여 봇이 이벤트를 수신하고 처리할 수 있도록 한다.
- 'BOT_TOKEN'은 Discord 개발자 포털에서 생성한 토큰값을 입력해야한다.
※ 봇 토큰을 소스코드에 기입해서는 안된다. 따라서, .env 파일 등에 저장하여 처리한다.
※ 이전, 관리했던 봇은 토큰이.. 소스코드에 있었다. (내가 작성한 코드는 아녔지만... 위험한 코드다.)
2-2. Python .env 파일 작성 (Token값 분리)
※ 일반적으로, API KEY, ACCESS KEY 같은 중요 파일은 소스코드에 직접적으로 넣지 않는다.
2-2-1. .env 파일 작성
- .env 파일로 분리하여 이를 코드에서 불러오는 방법으로 처리하고자 한다.
# .env
BOT_TOKEN=MY_TOKEN
- 실제 MY_TOKEN에는 자신의 토큰 값을 넣어주면 된다.
※ env 파일은 띄어쓰기 없이 입력을 해야한다.
※ Git 업로드를 해야 하는 경우 파일을 업로드 하면 안되므로, .gitignore에 .env 파일을 추가해준다.
2-2-2. 패키지 설치
python -m pip install python-dotenv
※ 본인의 경우, 파이썬 버전이 여러 개 설치되어 있어서, pip install python-dotenv로 했을때는 작동하지 않았다.
2-2-3. .env 코드 예제
# .env
TEST_KEY=TEST
from dotenv import load_dotenv
import os
# load .env
load_dotenv()
TEST_KEY = os.environ.get('TEST_KEY')
print(TEST_KEY)
2-2-4. 코드 결합 (최종 main.py)
import discord
from discord.ext import commands
from dotenv import load_dotenv
import os
load_dotenv() #.env 파일의 환경 변수 로드
BOT_TOKEN = os.environ.get('BOT_TOKEN')
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix='!', intents=intents)
@bot.event
async def on_ready():
print(f'Logged in as {bot.user.name} ({bot.user.id})')
await bot.change_presence(status=discord.Status.online, activity=discord.Game(name="Test"))
bot.run(BOT_TOKEN)
2-2-5. 최종 실행 결과
- 봇이 정상적으로 실행되고 있음을 확인 가능하다.
2-3. 오류 해결
discord.errors.PrivilegedIntentsRequired: Shard ID None is requesting privileged intents that have not been explicitly enabled in the developer portal. It is recommended to go to https://discord.com/developers/applications/ and explicitly enable the privileged intents within your application's page. If this is not possible, then consider disabling the privileged intents instead.
- 위와 같은 오류가 발생했다면, 아래 권한 설정을 Enabled 처리해야 한다.
'Toy Project > EA FC Pro club Draft Bot [Python]' 카테고리의 다른 글
[EA FC Pro club Draft Bot] 5. Draft Logic 구현 (0) | 2024.09.04 |
---|---|
[EA FC Pro club Draft Bot] 4. Git 연결 (0) | 2024.09.02 |
[EA FC Pro club Draft Bot] 2. Python 설정. (2) | 2024.09.01 |
[EA FC Proclub Draft Bot] 1. Discord Bot 기본 셋팅 (0) | 2024.08.31 |
[EA FC Proclub Draft Bot] 0. 프로젝트 시작 (6) | 2024.08.31 |