見出し画像

BlueSkyの全自動モデレーション

メンズエステなるものの存在は今回始めて知ったのですが、男性向けのエステサロンと称しておねえさんが男性にえちえちなエステをするお店があるらしい(ただし本番行為はNGらしい)。
そのようなお店に誘導するアカウントがSNSではわりとたくさんあるようなのですが、なにやらぺけったーでメンズエステ系のアカウントが大量に凍結するBANまつりになってるらしく、その余波でThreadsやBlueSkyにメンズエステ系アカウントが引っ越しする騒ぎとなっているらしい。

なかでもBlueSkyはモデレーションが甘いのか、ForYouやDiscoverといったユーザー向けおすすめフィードがメンズエステ系アカウントで埋め尽くされるとかいう惨事になってるようだ。

しかし、APIを有料化したくそみたいなぺけったーと違って、BlueSkyにはユーザーが独自にモデレーションをするための強力な機能がたくさんあるので、自力でモデレーションする方法をまとめておく。

モデレーションリストの作成

旧Twitterにも外部ツールとして、一覧のアカウントを一括ブロックするツールがあったが、BlueSkyにはモデレーションリストという機能がデフォルトで付いている。このモデレーションリストは、リストに入っているユーザーを閲覧する目的の通常のリスト機能とは逆に、リストに入っているアカウントを一括でミュートあるいはブロックする機能だ。

なにか必要があって調べごとをしたいときなどはリストのアカウントを一括でミュート解除する事もできる。
また、個別のアカウントではなくモデレーションリストに対してミュートあるいはブロックを行うので、リストがその後更新されて新しく追加された分があると、それを手動でブロックしなくても勝手にブロックしてくれるのもありがたい点だ。

このモデレーションリストは、「設定」メニューの「モデレーション」項目から作成することができる。

これでまずはモデレーションリストを作り、そのモデレーションリストを自動更新する手段を見ていく。

モデレーションリストの自動化

アプリパスワードの発行

モデレーションリストを自動化するにはまずBlueSkyAPIのアプリパスワードを発行する必要がある。

一つしか使わないなら適当な名前で良いが、もし自分で他にアプリを開発することがあるならば、たとえば「SpamBlocker」など、用途を明確にしたわかりやすい名前をつけておこう
アプリパスワードを作成ボタンを押すとアプリパスワードが表示されるので、これをどこかに保存しておく。閉じると二度と表示されないので、保存し忘れた場合はいちどパスワードを削除してもう一度作成する。

プログラムによるログイン

発行したアプリパスワードを使って、プログラムからBlueSkyにログインする。BlueSkyのSDKはTypeScript(JavaScript)やPythonなど様々な言語で公開されているので好きな言語を選ぶと良い。

例としてJavaScriptでログインしてみる。

const server = "https://bsky.social"
const id = "id_or_mail_address"
const password = "app_password"
const { BskyAgent } = await import( "@atproto/api" )
const agent = new BskyAgent({
	service: server,
})
await agent.login({
	identifier: id,
	password: password
})

idは自分のアカウントのIDまたはメールアドレス、パスワードは上記で発行したアプリパスワードを使用する。

リストのURIを取得する

BlueSkyの内部で使用されるURIの形式は独自であり、ブラウザに表示されているURLは使用できない。ブラウザで表示されるURLを内部のURIに変換する必要がある。

例えば下のリストは

次のようなURIに変換される

at://did:plc:ujbv5agep7botiks7dozqbo3/app.bsky.graph.list/3krj6s7ilz22v

まずはBlueSkyのAPIをたたいてHandleからBlueSky内部のDIDを取得する。
SDKなどを使用してもよいが、DID取得のAPIは単純に以下のURLをブラウザで表示するだけでも良い。

https://public.api.bsky.app/xrpc/com.atproto.identity.resolveHandle?handle=hi0a.com

最後の?handle=の部分にDIDを調べたいアカウントのハンドルをいれる。

リストのIDはURLに表示されている最後のやつなので、上記で取ったDIDとリストのIDを合わせて以下のURIを作る

at://{調べたユーザーのDID}/app.bsky.graph.list/{リストのID}


APIからリストを表示する

上記で得られたリストURIからAPIでリストを取得する

const { AtUri } = await import( "@atproto/api" )
const uri = new AtUri("at://did:plc:ujbv5agep7botiks7dozqbo3/app.bsky.graph.list/3krj6s7ilz22v")
let cursor
let list = []
do{
	const res = await agent.app.bsky.graph.getList({
		list: uri,
		limit: 100, 
		cursor: cursor
	})
	list = list.concat(res.data.items)
	cursor = res.data.cursor
} while( cursor )
console.log(list)


投稿を検索する

「メンズエステ」などのワードを使って、モデレーションリストに登録したい投稿を検索する

const res = await agent.app.bsky.feed.searchPosts({
	q: "メンズエステ",
	limit: 100,
})
console.log(res.data.posts)


モデレーションリストに登録する

投稿やユーザーを検索して、リストにぶちこむ対象を見つけたら、それをリストへ登録する。当然ではあるが、自分で作ったモデレーションリストでないと編集できないので気をつけよう。

const data = {
	$type: 'app.bsky.graph.listitem',
	subject: item.did,
	list: "at://{ユーザーDID}/app.bsky.graph.list/{リストID}",
	createdAt: new Date().toISOString()	
}
await agent.com.atproto.repo.createRecord({
	repo: agent.session.did,
	collection: 'app.bsky.graph.listitem',
	record: data
})


スクリプトの自動起動

上記で作ったモデレーションリストにぶち込むするクリプトを、cronなりタスクスケジューラなりで自動実行する設定をする。


完成

上記で作ったモデレーションリストをミュートなりブロックするなり設定をしたら、快適な青空が戻ってくる。

こんな感じで、自分でやれば非常に強力なモデレーションを作ることができるのがBlueSkyの魅力的なところだ。みんなもイーロン・マスクによってゾンビだらけになったぺけったーをやめてBlueSkyに移住してはどうだろうか。

他人が用意したモデレーションリストを使用することもできる。プログラムを組んだり、自動実行するサーバーマシンを用意したりすることが自分でできないなら、それができる友人を探して作るように命令しましょう。プログラミングやってるような人は他人からそのようなことを求められるのが大好きな人間なので快く引き受けてくれるはずだ。



この記事が気に入ったらサポートをしてみませんか?