discordbot을 만들어 보았습니다.
계기
평소 로컬에서 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 하지 않기 때문에 무슨 기능이 있는지 확실히 모릅니다만….
Reference
이 문제에 관하여(discordbot을 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/azusa_azure/items/c7b97ee6859eeae04bf2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
略
if message.content == '/yagi':
result = "めぇー"
await message.channel.send(result)
略
s = message.content
dicecheck = re.match('^/[1-9]{1}[D]', s)
if dicecheck:
dice = 1
else:
dice = 0
略
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)
略
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)
略
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)
略
elif message.content == '/検索':
await message.channel.send("https://www.google.co.jp")
Reference
이 문제에 관하여(discordbot을 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/azusa_azure/items/c7b97ee6859eeae04bf2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)