discord.py+gspread로 출퇴근 관리

배경.


집에서 일하면서 출근하는 느낌을 표현하기 위해 디스코드로 뭐라도 할 수 있을까 생각하다 음성채널에 들어갈 때 출근해 봇을 만들어 보고 벗고 퇴근했다.

생성물



사용된 기술

  • discord.py
  • gspread
  • 해본 일

  • 음성 채널의 in/out 검측
  • 구글 spread sheet에 저장
  • 텍스트에 대한 반응 권한 수여
  • 음성 채널의 in/out 검사

    discord.Clinenton_voice_state_update(self, member, before, after)로 테스트 수행
    
    async def on_voice_state_update(self, member, before, after):
      if(before.channel is None):
        # ボイスチャンネルにinした時の処理
        start_work(member)
      elif(after.channel is None):
        # ボイスチャンネルからoutした時の処理
        end_work(member)
    

    Google spread sheet에 저장


    ⅰ. 적절한 곳에서 spread sheet 만들기 (설명략)
    ⅱ. GCP를 통한 서비스 계정 만들기 + drive API/sheets API의 유효성
    ⅲ. Python에 설치

    GCP를 통한 서비스 계정 만들기 + drive API /sheets API의 유효성


    사이트 축소판 그림 참고했습니다.
    ⅰ.에서 만든 spread sheet에서 만든 서비스 계정은 공동 편집자로 초대됩니다.또한 여기에 저장된 기밀 키의 파일 이름을 임시himitsu.json로 설정합니다.

    Python에 설치


    실현은 다음과 같다.
    
    import json
    import gspread
    from oauth2client.service_account import ServiceAccountCredentials
    
    
    def register(record: Dict[str, str]):
      scope = [
                  'https://spreadsheets.google.com/feeds',
                  'https://www.googleapis.com/auth/drive'
              ]
      credentials = ServiceAccountCredentials.from_json_keyfile_name('himitsu.json', scope)
      gc = gspread.authorize(credentials)
    
      workbook = gc.open_by_key('作成したspread sheetのkey')
      sheet = workbook.sheet1
    
      sheet.insert_row(list(record.values()))
    

    텍스트 반응


    잘 보관돼 있다는 걸 알 것 같아서 최신 투고에 반응했다.discord.Messageadd_reaction(emoji)를 사용하여 실현하다.또 최근 기고문을 취득하기 위해 discord.TextChannelhistory(*)를 사용했다.
    import discord
    
    class Clinet(discord.Client)
      def success_reaction(self, member, is_end=False)
        channel = self.get_channel('discordのテキストチャンネルのid')
        async for msg in channel.history(limit=10):
            if msg.author == member:
                await msg.add_reaction("👍") if is_end else await msg.add_reaction("👀")
                break
    

    감상


    다음은 출근 정보 요약 기능을 만들어 보자.

    사이트 축소판 그림

  • https://tanuhack.com/operate-spreadsheet/
  • https://discordpy.readthedocs.io/ja/latest/
  • 좋은 웹페이지 즐겨찾기