Rustのserenityでdiscord bot作りたい
serenityを使って動かすらしい
songbirdなるものを使えばボイスチャットで無双できるらしいけどまずはチャットだけにしておく
まずはこれでdiscord側の設定とかやりつつコードをパクらせていただく
cargo-shuttleってなんだ?
npmみたいなもんか?(npmもよくわかっていない)
shuttleすげぇ!かっけぇ!
cargo shuttleするだけである程度コード書いてたから,これをいろいろいじればいいんだな
やっとrust-analyzerが静かになった
無事 Hello World
今日はここまで(りっこ28)
EventHandlerトレイトはたくさんの非同期メソッドがあって、それぞれどのタイミングで呼び出されるかが名前からわかるようになってる。
「メッセージが送られたとき」みたいな当たり前のものから「誰かがタイプしているとき」みたいなニッチなものまで用意されててすごい
webhookとstage instanceの意味がわからん
markdown楽しくなって遊びつつある
EventHandlerのready, message, voice_state_updateあたりを使って簡単なものを作ろう
マクロで作られたトレイトメソッドが読めないので、--pretty=expanded
で実行したい(いまパソコンを使えない)
今のレベルではcargo expandはあんまりするもんじゃないな
分からないことがふえるだけだ
今更Initial Commit
色々調べているとSlash Commandsなるものがあって,これを実装するとユーザーは"/"を打つだけですべてのコマンドとその機能のリストを見ることができるらしい.
自分が利用しているbotもプレフィックスが"!"から"/"に変更していたけどこういうことか.
serenity/examplesのownerの意味が分からん
色々検証してみたけど,そのギルドの管理者でもないし招待した人でもなさそう
async fn voice_state_update(
&self,
ctx: Context,
_old: Option<VoiceState>,
new: VoiceState
){
println!("voice state update");
if let Some(channel_id) = new.channel_id {
println!(
"{:?}",
channel_id
.name((&ctx.cache, ctx.http.as_ref()))
.unwrap_or_else(|_| "No Name".to_string())
.await
);
}
}
これでボイスチャンネルに入ったタイミングでそのボイスチャンネルの名前を出力できた
自らボイスチャンネルに対して操作をするのってどうやるんだ?
async fn message(&self, ctx: Context, msg: Message) {
if let Some(guild_id) = msg.guild_id {
let guild = guild_id
.to_partial_guild((&ctx.cache, ctx.http.as_ref()))
.get_guild((&ctx.cache, ctx.http.as_ref()));
let voice_state = guild.voice_state;
}
}
if let Some(cache_ref) = msg.guild(&ctx.cache) {
let guild = cache_ref.clone();
let voice_state = guild.voice_state;
}
これでええんか
cacheはいつになったら用意されるんや
EventHandlerのreadyでコマンドを設定して、概要をメッセージで送るということをしてるけど、例のコードが古いバージョンやからなんとか今のバージョンに合わせる
あとinteraction_createがなんなのか
今までimpl CacheHttpが想定されてる引数には(&Arc<Cache>, &Http)を渡してきたけど、ContextとかHttpでもなんとかしてくれる
pub(crate)はそのグレード内にだけ公開したいもの
スラッシュコマンド使いたかったらpoiseしかないのか