discordbot을 만들어 보았습니다.

8755 단어 파이썬디스코드

계기



평소 로컬에서 selenum이라든지 pyautogui로 RPA를 만들어 지루한 일 순서가 많아 휴먼 에러가 나오는 일을 자동화하고 있습니다만, 온라인상에서 계속 움직이지 않으면 앞으로 불편.
그렇지만 거기에 이르는 길까지가 모른다.

Django, Flask는 만져 보았지만 아직 잘 모르고 deploy는 뭐라고 하는 것으로 지인의 TRPG용으로 discortbot으로 만들어 놀면서 학습해 보았다.

파이썬에서 실용 Discord Bot (discordpy 해설)
하나님이 계시기 때문에 참고했습니다.

기본 처리



discord.py

if message.content == '/yagi':
    result = "めぇー"
    await message.channel.send(result)

이것으로 기본적으로는 커멘드에 대해서 회신을 돌려줄 수 있었다고.
그렇다면/yagi라는 명령에 대해 〇메ぇ와 회신을 돌려줄 수 있군요.

그렇다면 다이 롤도
· 명령을 지정하여
· 처리 작성
· 반환
로 완료할 수 있네요. (아마추어 생각)

거푸집을 흔들어보세요



discord.py

    s = message.content
    dicecheck  = re.match('^/[1-9]{1}[D]', s)
    if dicecheck:
        dice = 1
    else:
        dice = 0

로/nDN이라고 쓰면 다이스 롤인 것을 판정해

discord.py

    if dice > 0:
        await message.channel.send('いちたりなくなーれ!')
        i = 0
        count = int(message.content[1:2]) + 1
        dim = int(message.content[3:])
        lst = []
        for i in range(1, count):
             rand_num =  random.randint(1, dim)
             lst.append(rand_num)
        await message.channel.send(lst)

※nDN에서 n은 1-9, N은 좋아하는 숫자라는 약속.
라고, 꽤 역기입니다만 n회, N면 다이스를 좀 던지는 처리를 넣어 보겠습니다.
random은 정말로 랜덤한 숫자가 돌아오는 거야? 라고 하는 칼도셉트적 시점은 이 때 두어 둡니다.

아, 드디어 온통 없어지는 어리석음도 걸읍시다.

배포해 보았다.



그래, 만났어.
그렇기 때문에 여기까지는 문제 없게 할 수 있었으므로, heroku에 deploy한 bot로 selenum이 움직일까-라고 시험해 본다.

selenium을 움직여보세요



discord.py

    options = Options()
    options.binary_location = '/app/.apt/usr/bin/google-chrome'
    options.add_argument('--headless')
    options.add_argument('--disable-gpu')
    browser = webdriver.Chrome(options=options)
    browser.implicitly_wait(10)

결과적으로 말하면 이것으로 갈 수있었습니다. (heroku에 selenium과 chrome 추가하는 것은 별도 필요)
후에는 find_element를 노력하는 느낌으로.

그렇다면 beautifulsoup도 갈 수 있죠? 그리고

beautifulsoup도 시도해보기



discord.py

elif message.content == '/ゆれた':
    res = requests.get('http://www.jma.go.jp/jp/quake/00000000093.html')
    soup = BeautifulSoup(res.text, 'html.parser')
    result = soup.select_one('table.textframe').get_text(strip=True)
    await message.channel.send(result)

※샘플에 기상청의 지진 정보를 끌어오는 상정입니다.
이제 세션 중에 지진이 와도 괜찮아! 당황하지 않고/흔들렸다라고 넣으면 알 수 있어!
흔들리지 않는다고 돌려주고 싶다. 이해합니다.

후에는 브라우저라든지 열면 편리할까-라고 생각했지만 webbrowser.open_new에서는 안 된다(당연한가…)
그래서 여기는 discord 씨의 URL 형식 같은 것이 걸리면 URL로 한다.
움직이면 좋다!

브라우저를 열고 싶습니다.



discord.py

elif message.content == '/検索':
    await message.channel.send("https://www.google.co.jp")

해결. 근육은 모든 것을 해결합니다.

그렇다고 해서, 전혀 heroku라든지 deploy라든지 몰랐던 아마추어라도 할 수 있었어. Qiita 최고인가…

후에는 명령 부분을 퍼지로 하거나 그에 대해 하는 처리를 넣어 가면 확장은 할 수 있네요.
나는 TRPG 하지 않기 때문에 무슨 기능이 있는지 확실히 모릅니다만….

좋은 웹페이지 즐겨찾기