728x90

기억을 더듬어...

정확히 기억은 나지 않지만 기억을 더듬어 보면 중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

감사합니다!

 

728x90