기억을 더듬어...
정확히 기억은 나지 않지만 기억을 더듬어 보면 중3 때인 걸로 기억됩니다.
그리고 그때 처음 파이썬을 접하고 처음 시작한 작은 프로젝트가 디스코드 봇 프로젝트입니다.
그때 당시 파이썬에 대한 아무런 정보와 지식 없이 킹 갓 구글링을 통하여 봇을 만든 기억이 있네요.ㅋㅋㅋ
코드를 살펴보면
import discord
import random
bad = ['욕']
class chatbot(discord.Client):
async def on_ready(self):
game = discord.Game("내용")
await client.change_presence(status=discord.Status.online, activity=game)
print("연결완료")
async def on_message(self, message):
if message.author.bot:
return None
if message.content.startswith('Ellis 랜덤2'):
randomNum = random.randrange(1, 3)
if randomNum==1:
channel = message.channel
msg = "1"
await channel.send(msg)
else:
channel = message.channel
msg = "2"
await channel.send(msg)
if message.content.startswith('Ellis 오늘레식?'):
randomNum = random.randrange(1, 3)
if randomNum==1:
channel = message.channel
msg = "레식 각입니다."
await channel.send(msg)
else:
channel = message.channel
msg = "자러갑니다...."
await channel.send(msg)
if message.content == "Ellis 출력":
await message.channel.send("Python Bot에 의해 출력됨.") #바뀜
if message.content.startswith("Ellis 1부터10"):
for x in range(10):
await message.channel.send(x+1) #바뀜
if message.content.startswith("Ellis계산"):
global calcResult
if message.content[7:].startswith("더하기"):
calcResult = int(message.content[11:12])+int(message.content[13:14])
await message.channel.send("Result : "+str(calcResult)) #바뀜
if message.content[7:].startswith("빼기"):
calcResult = int(message.content[10:11])-int(message.content[12:13])
await message.channel.send("Result : "+str(calcResult)) #바뀜
if message.content[7:].startswith("곱하기"):
calcResult = int(message.content[11:12])*int(message.content[13:14])
await message.channel.send("Result : "+str(calcResult)) #바뀜
if message.content[7:].startswith("나누기"):
try:
calcResult = int(message.content[11:12])/int(message.content[13:14])
await message.channel.send("Result : "+str(calcResult)) #바뀜
except ZeroDivisionError:
await message.channel.send("You can't divide with 0.") #바뀜
message_contant=message.content
for i in bad:
if i in message_contant:
await message.channel.send('욕설 ㄴㄴ')
await message.delete()
if message.author == client.user:
return
if message.content == ("Ellis 나가") or message.content == ("엘리스 나가") or message.content == ("ellis 나가"):
channel = message.channel
msg = "ㅠㅠ"
await channel.send(msg)
return None
if message.content == ("Ellis") or message.content == ("엘리스") or message.content == ("ellis"):
randomNum = random.randrange(1, 1)
if randomNum==1:
channel = message.channel
msg = "안녕하세요 :D"
await channel.send(msg)
else:
channel = message.channel
msg = "안녕!! :D"
await channel.send(msg)
if message.content == ("Ellis 1부터100") or message.content == ("Ellis 1부터100 까지"):
channel = message.channel
msg = "아......."
await channel.send(msg)
return None
if message.content == "Ellis 바보":
channel = message.channel
msg = "실망이에요 ㅠㅠ"
await channel.send(msg)
return None
if message.content == ("엘라") or message.content == ("엘리스 엘라") :
channel = message.channel
msg = "Ella is my sister. ¯ \_(ツ)_/¯ "
await channel.send(msg)
return None
if message.content == ("멜라") or message.content == ("엘리") :
channel = message.channel
msg = "Ella is my sister. ¯ \_(ツ)_/¯ "
await channel.send(msg)
return None
if __name__ == "__main__":
client = chatbot()
client.run("토큰")
import discord
import random
디스코드 봇이기 때문에 discord라이브러리를 import 하였다.
또한 기능 중 랜덤 요소가 있기 때문에 random도 추가하였다.
class chatbot(discord.Client):
async def on_ready(self):
game = discord.Game("내용") #상태표시 내용
await client.change_presence(status=discord.Status.online, activity=game)
print("연결완료")
async def on_message(self, message):
if message.author.bot: #봇 대화 차단
return None
코드를 보면 봇의 상태 표시줄 기능과 디코서버와의 접속을 하는 기능을 하는 문장이다.
그리고 그 아래 봇끼리 대화하는 사고를 방지하는 코드 또한 있다.
문장 출력
if message.content == "Ellis 바보":
channel = message.channel
msg = "ㅠㅠ"
await channel.send(msg)
return None
if 절을 이용하여 "특정 메시지"가 들어오면 미리 입력해둔 메시지를 봇이 읽어주면 된다.
위문장을 예시로 들면
if 메시지창에 "Ellis 바보"가 등장할 경우:
1.Ellis가 답할 채널에 감
2.답할 문장(msg) = "ㅠㅠ"
3.Ellis가 간 채널에 답할 메시지를 전송함
4.끝
이런 원리이다.
가끔 기능을 추가하다 보면 서로 다른 질문에 같은 답변이 들어갈 때가 있다.
if 절을 2번 사용하여 각각 다른 기능으로 만들 수도 있지만 or 을 사용하면 간단히 질문을 추가할 수 있다.
또한 같은 질문에 봇이 여러 답을 랜덤으로 내보내는 기능이 필요할 때도 있다.
이때는 위에서 import 한 random 라이브러리를 사용하면 해결 가능하다.
if message.content == ("Ellis") or message.content == ("엘리스") or message.content == ("ellis"):
randomNum = random.randrange(1, 1)
if randomNum==1:
channel = message.channel
msg = "안녕하세요 :D"
await channel.send(msg)
else:
channel = message.channel
msg = "안녕!! :D"
await channel.send(msg)
단순히 or 을 사용하여 사용자가 재시 할 수 있는 질문을 "Ellis", "엘리스", "ellis" 로 추가해 보았다.
랜덤 답변에 경우 두 답변의 확률을 50:50으로 설정했다.
if 메시지창에 "Ellis"또는 "엘리스"또는 "ellis"가 등장할 경우:
랜덤 확률=50:50
if 전자일 경우:
ellis 답할 채널로 이동
답변(msg)= "안녕하세요 :D"
답변 전송
else:
답할 채널로 이동
답변=안녕!! :D
답변 전송
기억을 되살려 중3 때 만든 디코봇 als를 분석해 보았습니다 :)
깃허브: https://github.com/FURY312/PDBs.git
GitHub - FURY312/PDBs: Python Discord Bots
Python Discord Bots. Contribute to FURY312/PDBs development by creating an account on GitHub.
github.com
감사합니다!
'Python' 카테고리의 다른 글
[Python파이썬] 벤포드 법칙으로 자료의 참, 거짓 분석 (0) | 2022.10.26 |
---|---|
[파이썬Python] 문자암호화, 복호화 (암호 발생기 만들기) (0) | 2022.10.22 |
[Python파이썬] 파일검색, 파일삭제 하는 기능을 이용해서 컴퓨터 시한폭탄 만들기. (0) | 2022.10.22 |
파이썬 인스타그램 좋아요 봇 만들기. [Python, 자동 좋아요봇] (0) | 2022.10.19 |
Python파이썬 특정 지점의 RGB 값을 구하기 (0) | 2022.10.18 |