Open5
serenity チートシート(予定)
ピン留めされたアイテム
serenity はRust製のDiscord bot フレームワーク。
触ったことがない人はRustで作るdiscord bot入門編 (serenity使用)から。
リポジトリ:serenity-rs/serenity: A Rust library for the Discord API.
公式example:serenity/examples at current · serenity-rs/serenity
serenity では〇〇はこう書く! というのがあればぜひコメントを残していってください。
serenity: "0.10.9"
チャンネル一覧を取得
let tmp_channels: Vec<GuildChannel> = ctx.http.get_channels(*guild_id.as_u64()).await?;
出力を多少整えたらこんな感じ。
コード DiscordBotWithRust/channels.rs at develop · t4t5u0/DiscordBotWithRust
- リアクションを取得
- リアクションに応じて処理を行う
メッセージ投稿系の実行例です。
use serenity::framework::standard::{macros::command, CommandResult};
use serenity::model::prelude::*;
use serenity::prelude::*;
#[command]
#[description = "発言"]
async fn say(ctx: &Context, msg: &Message) -> CommandResult {
msg.channel_id.say(&ctx.http, "これは発言です").await?;
Ok(())
}
#[command]
#[description = "リプライ"]
async fn reply(ctx: &Context, msg: &Message) -> CommandResult {
msg.reply(&ctx.http, "これはリプライです").await?;
Ok(())
}
#[command]
#[description = "リプライ"]
async fn reply_m(ctx: &Context, msg: &Message) -> CommandResult {
// msg.reply_mentionは普通にメンションされるだけ
msg.reply_ping(&ctx.http, "これはメンション付きリプライです")
.await?;
Ok(())
}
#[command]
#[description = "メンション"]
async fn mention(ctx: &Context, msg: &Message) -> CommandResult {
msg.channel_id
.say(
&ctx.http,
format!("{} これはメンションです。", msg.author.mention()),
)
.await?;
Ok(())
}
#[command]
#[description = "リアクションをつける"]
async fn react(ctx: &Context, msg: &Message) -> CommandResult {
// どっちでもいける
msg.react(&ctx.http, '👍').await?;
msg.channel_id
.create_reaction(&ctx.http, msg.id, '👎')
.await?;
Ok(())
}
実装はここに DiscordBotWithRust/role.rs at develop · t4t5u0/DiscordBotWithRust
- ロール一覧
let roles: HashMap<RoleId, Role> = msg.guild_id.unwrap().roles(&ctx.http()).await?;
- ロール付与
- ロール作成
msg.guild_id.unwrap().create_role(&ctx.http, |r: &mut EditRole| r.name(role_name)).await?;
- ロール削除
msg.guild_id.unwrap().delete_role(&ctx.http, id).await?;