[Python] 로그 기록용 디스코드 봇 제작

11469 단어 pythonpython

2학년 1학기에 배운 과목 중 자유 조별 프로젝트 과목이 있어 우리 조는 학교 내에서

학우들 간 소통과 공유가 가능한 독자적인 디스코드 채널을 만들고자 했다.

서버를 운영하는데 필요한 인증 기능, 채팅 보조 기능, 서버 로그 기록 기능 등이 필요했고

나는 그 중 디스코드 서버에 출입하는 사람들의 인증 정보를 포함한 사용자 정보와

시간대별 채팅 등을 수집할 수 있도록 기록 봇을 제작했다.

핵심 함수 몇 가지를 보면 다음과 같다.


1. 서버 입장 및 퇴장 로그 기록

#---------------------------Save User Info Log------------------------------------
@client.event   # 서버 신규 접속
async def on_member_join(member):
    user_log = open('userLog.txt', 'a')
    user_log.write("\n")
    user_log.write(dateTime)
    user_log.write("      ")
    user_log.write(member.name)
    user_log.write("              ")
    user_log.write("%d"%member.id)
    user_log.write("      ")
    user_log.write("JOIN_IN")
    user_log.close()

@client.event   # 서버 퇴장
async def on_member_remove(member):
    user_log = open('userLog.txt', 'a')
    user_log.write("\n")
    user_log.write(dateTime)
    user_log.write("      ")
    user_log.write(member.name)
    user_log.write("              ")
    user_log.write("%d"%member.id)
    user_log.write("      ")
    user_log.write("LEFT_OUT")
    user_log.close()

어쩌면 당연한 사실일지 모르지만, 유저가 동시에 접속할 수도 있고 메시지를 처리하면서

입장과 퇴장도 동시에 처리해야하기 때문에 async 키워드를 이용해 비동기식으로

이벤트를 처리할 수 있도록 작성했다.

그 외에는 단순하게 파일 입출력 함수를 통해 시간, 이름, 아이디, 상태를 기록하도록 했다.

2. 채팅 및 인증 정보 기록

# 인증 메일 기록
if message.content.endswith("kumoh.ac.kr"):
    user_log = open('userLog.txt', 'a')
    user_log.write("\n")
    user_log.write(dateTime)
    user_log.write("      ")
    user_log.write("{0.author}".format(message))
    user_log.write("         ")
    user_log.write("%d"%message.author.id)
    user_log.write("      ")
    user_log.write("Verification")
    user_log.write("      ")
    split_email = message.content
    split_email_List = split_email.split(" ")
    user_log.write(split_email_List[1])
    user_log.close()
   
    # 채팅 기록
    channel = message.channel
    chat_log = open('chatLog.txt', 'a')
    chat_log.write("\n")
    chat_log.write(dateTime)
    chat_log.write("  (")
    chat_log.write(channel.name)
    chat_log.write(") ")
    chat_log.write("{0.author}".format(message))
    chat_log.write(" : ")
    chat_log.write(message.content)
    chat_log.close()

사용자가 인증을 하려면 인증 채널에서 교내 웹메일을 통해 인증 번호를 받도록 서버를 구현해서,

만약 메시지 이벤트 문자열의 끝이 교내 웹메일 주소로 끝난다면 로그에 기록할 수 있도록 했다.

후에 각자 만든 봇을 Replit과 UptimeRobot을 이용해 우리가 컴퓨터를 끄더라도

24시간 스스로 구동되도록 제작했다.


  • 사용자 정보 기록

  • 채팅 기록

좋은 웹페이지 즐겨찾기