Vim 스타일 대체 명령을 Slackbot에 구현해 보았습니다. #Python

Vim은 좋다!



여러분, Vim을 사용하고 있습니까?
Vim을 사용하고 있습니까?
Vim을 사용하지 않는 것은 아닙니다.
나는 사용하고있다.

그럼 Vimmer의 여러분, Vim의 일본 커뮤니티는 알고 있습니까?
Vim의 일본 커뮤니티는 주로 Lingr에서 활동하고 있습니다.
그래서, 여기의 채팅 방이지만 상당한 수의 봇이 움직이고있어, 매우 편리한 기능이 많이 있습니다.
그런 가운데, 내가 가장 좋다고 생각한 기능이 여기입니다.

이거 굉장하지 않아?
Vim의 대체 명령을 치면 bot가 희미하게 수정 된 텍스트를 보냅니다.
(모든 프로그래머는 Vimmer라는 전제하에 진행하기 때문에 Vim의 대체 명령에 대해서는 설명하지 않습니다.

나는 전부터 항상 생각했습니다.
"이것, 자신과 이 Slack에 팩해라"
하지만 Slackbot은 과거에 포기한 경험이 있었기 때문에 경원하고 있었습니다만,
「혹시 지금이라면 할 수 있잖아?」
나는 생각했다.

그래서 번역하는 법.

소스는 코↑코↓에 놓을 때입니다.

참고로 한 사이트는 다음과 같습니다.
  • Python의 slackbot 라이브러리로 Slack 봇 만들기
  • 파이썬으로 Slackbot 만들기

  • 만드는 법



    준비



    이번에는 이 기사을 참고하겠습니다.
    먼저 아빠와 이 근처까지 준비하십시오.
    지금까지 끝나면이 대체 명령을 만들고 싶습니다.

    대체 명령



    먼저 plugin 디렉토리에 bot_listen.py라는 파일을 만듭니다.

    내용은 이렇게합니다.

    bot_listen.py
    from slackbot.bot import listen_to
    import re
    
    pastmsg = ''
    pastmsg2 = ''
    
    @listen_to(r'.+')
    def savemsg(message):
        global pastmsg2
        global pastmsg
        pastmsg2 = pastmsg
        pastmsg = message.body['text']
    
    @listen_to(r'^s/+\S+/+\S+/$')
    def replace(message):
        before = re.findall(r'^s/(.*)/+\S+/', pastmsg)
        after = re.findall(r'^s/+\S+/(.*)/', pastmsg)
        if before[0] in pastmsg2:
            message.send('「' + pastmsg2.replace(before[0], after[0]) + '」って言いたかったんだね')
        else:
            message.send('前の文章に「' + before[0] + '」は入って無いよ?')
    

    그렇다면,
  • pastmsgpastmsg2에 최근 두 개의 메시지를 저장하십시오
  • s/なんか1/なんか2/ 라는 형태의 발언이 있으면 처리를 한다
  • beforeなんか1 의 문자열 목록, afterなんか2 의 목록을 할당
  • 2개 전의 메시지 안에 なんか1 가 있으면, なんか1
  • 일치하지 않으면, bot 짱에게 바보가 된다

  • 정규 표현식을 사용할 수 있다면 큰 일은 없습니다.

    도전


  • 최근 2개의 메세지의 보존이 더럽다
  • 표준 기능으로 취득 방법이 있을 것 같다

  • 치환 명령의 직전의 문장 밖에 반응하지 않기 때문에, 자신이 발언해 오자를 깨닫은 후에 다른 유저가 먼저 발언을 해 버리면 치환이 효과가 없게 된다
  • 연상 배열 당 개별 ↑ 각 ↓의 사용자마다 최근 2 개를 저장해 두면 좋을지도
  • 라든지 표준 기능으로 취득 h (ry

  • 어차피 なんか2before 1개씩 밖에 없기 때문에 리스트가 아니어도 좋지만 매치한 문자열의 취득 방법을 알 수 없었다
  • 구구레

  • 좋은 웹페이지 즐겨찾기