3
4

ほぼ初めてのSNSで気づいたらBot作ってた

Posted at

まず初めに

六角レンチです
誰やねんって話ですが趣味レベルでプログラミングしてる人です
Qiitaよく見るので自分も書いてみたいなぁと思って作ってみます
中身は黙示録みたいなものです
初めてなのでかなり拙いと思います

(ほぼ)初めてのSNS

自分はTwitterもといXをやっていましたがずっとROMってたので(4年くらい)SNSというのが情報を集める場所という認識でいました。

それであのマスクが名前をXに変えたあたりからスパムが多すぎて他のSNSに移りたいと思い色々調べてMisskey ioにたどり着きました(7月初めくらい)

それでどうせ新しいSNSに行くんだから発言もしてみようかなと思って発言したらレターパックで現金送れとかオフチョベットしたテフをマフガットしてリットにする様子とか送られてほ~~~んってなって気づいたら六角レンチになりました(どうして)

pythonを使って334に勝ちたい

まぁそんなことは置いといてMisskey ioをやったことがあるなら知ってると思いますがioには334という競技があります

3時34分に一斉に334をノートして(ノートはツイートと同じ意味)誰が一番3時34分に近い時間にノートできるか競う過酷な競技です(実はこの時3月1日でございます。は競技化されてなかった)

そして自分も参加するのですがここで一つ悪いことを思いつきます

それがpyautoguiを使って正確にノートしようというものです
(pyautoguiとはなんぞやっていう人に解説すると画面のクリックとかを自動化できるライブラリです。)

試行錯誤が始まる

そしてpyautoguiを使ってノートしてみたのですがうまくいきません。

なぜなら

pyautoguiで3時34分にノートボタンをクリックする

実際にノートされる

この矢印の部分に遅延が入るからです(0.6秒くらい)

これを解決するには遅延を考えて早めにノートする必要があります。

そしてここから改良が始まります

まず最初にtime.sleep()を使って遅延させてノートさせるのですがどうもうまくいきません。

というのも実はtime.sleep()というのは結構適当な時間寝てるからです
(といっても0.01秒のくらいの誤差、でも334は0.01秒の世界。)

そして最終的にはwhile Trueとbrakeとdatetimeを使って

# 3:39:55くらいまで待ってから実行する
while True:
    dt = datetime.datetime.now()
    if dt.second == 59:
        break
now = time.time()
while time.time()-now <= 1-means:
    pass
pyautogui.click()

といった感じのものになりました(meansは遅延だったはず、もう使ってないからわからない)

ちなみにこのプログラムを使って3回くらい勝ちました(たぶん)

APIを知る

いままでpyautoguiを使ってましたがとうとうあの存在を知ってしまいます

APIです

APIを使えば一々マウスカーソルをノートボタンの上に持ってきて334までずっとそこに置いとく~とかせずにプログラムを裏で動かしておけば勝手にノートしてくれます

しかしAPIを使うにはrequests(HTTP通信のライブラリ)の知識が必要です

さらにAPIに関する知識も全くないのでそれも学習する必要があります

さらに言えばその時はまだdef文すら曖昧な感じだったのでpythonの知識も必要です(辞書とかリストとかも少ししか知らなかった)

そんな感じでいろいろ困っていたところとあるライブラリに出会います(そして今も使ってます)

それがmisskey.pyです

misskey.pyすごい

最初にこのライブラリの使い方を教えます

from misskey import Misskey
mk = Misskey("misskey.io")
print(mk.notes_local_timeline(1))

これだけでローカルタイムライン(この場合misskey.ioだけのノートが流れるTL)から一個ノートを持ってきて返り値(もちろんjsonからpythonの型にされてる)がprintされます。

一々jsonのデータとかエンドポイントとか書かなくてもこれだけでできます。

すごくない?

さらにノートを作るのも

from misskey import Misskey
mk = Misskey("misskey.io",i="token")
mk.notes_create("中身のテキスト")

といった感じですごい簡単に書けます(i=にはトークンを入れる)

そして334のことをすっかり忘れて気づいたらとあることを考えていました

Bot作りたい

SNSには結構な量のBotがいます

例えばTwitterだったら最近終了しちゃったけど3文字Botとかいましたよね

もちろんmisskey ioにもBotは存在して例えば

...等々色々Botがいます

そしてBotを作るのはいい経験になりそうという浅はかな理由でBotを作ろうとします

ストリーミング? Websocket?

最初から難所が来ます、普通のBotなら(例えば3文字botとかなら)適当にノートさせるだけで終わりますが自分が作りたいと思ったのはユーザーに反応したりするBotです。

つまりリアルタイムなBotです。

APIについての知識はある程度蓄えたとはいえまだまだ初心者です(今もだけど)

ここで登場するのがasyncio(非同期処理ライブラリ)とwebsockets(非同期通信ライブラリ)なわけですがもちろん知識なんて持ってるはずもなく頭が爆発しそうになります🤯

そこでとあるQiitaの記事を見つけます(この記事が本当にありがたかったからQiita書いてみようかなってなった)

それがこの記事です

そこに書いてあったのはmisskey.pyとwebsocketsを使ってストリーミングBotを作ってみようという自分が考えていたことと完璧に一致することが書いてありました
(ただちょっと情報が古かったので注意)

そしてこの記事を参考にして色々な機能を付けたりMisskeyにいるいろんな人から助言をもらったりして完成したのが


ぶろみね君です。

いつの間にかBot作ってた

このBot、いつ作られたのかというと
2023/8/17

そしてMisskey.ioにアカウントを作ったのが
2023/7/8

つまり、大体1ヶ月と少しでdef文少しわかるくらいの状態からBotを作りました。






?????????????????

まとめ

まとめると

  • TwitterもといXがスパムだらけになる
  • Misskey ioに行く
  • 334という競技を知り悪いことをする
  • APIを知る
  • Botを作る

今振り返るとAPIを知ってからBotを作ろうっていう発想になったの我ながらすごいなぁと感じます

そしてもう長くなってきたので書かないですがここからさらにラズパイを買って最終的にはCUIで運用したりGitHubを使うようになったりしてます

これらも全部Botを作ったおかげでやったので本当にためになったなぁと思ってます浅はかな理由でもやってよかった

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4