#きっかけ
普段ローカルでseleniumとかpyautoguiでRPAを作ってつまらない仕事手順が多くてヒューマンエラーが出る仕事を自動化しているのですが、オンライン上で動き続けていないとこの先諸々不便。
でもそこに至る道までが分からん。
Django,Flaskは触ってみたけれどまだよくわからないしdeployってなんぞやということで知人のTRPG用にdiscordbotで作って遊びつつ学習してみた。
Pythonで実用Discord Bot(discordpy解説)
神がいらっしゃるので参考にしました。
###基本的な処理
略
if message.content == '/yagi':
result = "めぇー"
await message.channel.send(result)
これで基本的にはコマンドに対して返信を返すことができたと。
となれば/yagi というコマンドに対して めぇーと返信が返せるね。
で、あればダイスロールも
・コマンドを指定して
・処理書いて
・返す
で完了できますね。(素人考え)
###ダイスを振ってみる
略
s = message.content
dicecheck = re.match('^/[1-9]{1}[D]', s)
if dicecheck:
dice = 1
else:
dice = 0
として/nDNと書かれたらダイスロールであることを判定して
略
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でseleniumが動くかなーと試してみる。
###seleniumを動かしてみる
略
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も試してみる
略
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にする、でごまかしましょう。
動けばいいねん!
###ブラウザを開きたい
略
elif message.content == '/検索':
await message.channel.send("https://www.google.co.jp")
解決。筋肉は全てを解決する。
というわけで、全くherokuとかdeployとか分からなかった素人でもできたよ。Qiita最高か…
後はコマンド部分をファジーにするとか、それに対してする処理を入れていけば拡張はできますね。
私はTRPGやらないので何の機能がいるかとんと分かりませんが…。