use teloxide::{prelude::*, types::ParseMode, utils::html};
use teloxide_core::adaptors::DefaultParseMode;
type Bot = DefaultParseMode<teloxide::Bot>;
#[tokio::main]
async fn main() -> ResponseResult<()> {
pretty_env_logger::init();
let bot = teloxide::Bot::from_env().parse_mode(ParseMode::Html);
let handler = dptree::entry()
.inspect(|u: Update| {
eprintln!("{u:#?}"); })
.branch(
Update::filter_chat_member()
.branch(
dptree::filter(|m: ChatMemberUpdated| {
m.old_chat_member.is_left() && m.new_chat_member.is_present()
})
.endpoint(new_chat_member),
)
.branch(
dptree::filter(|m: ChatMemberUpdated| {
m.old_chat_member.is_present() && m.new_chat_member.is_left()
})
.endpoint(left_chat_member),
),
);
Dispatcher::builder(bot, handler).enable_ctrlc_handler().build().dispatch().await;
Ok(())
}
async fn new_chat_member(bot: Bot, chat_member: ChatMemberUpdated) -> ResponseResult<()> {
let user = chat_member.old_chat_member.user.clone();
let telegram_group_name = chat_member.chat.title().unwrap_or("");
let username =
user.mention().unwrap_or_else(|| html::user_mention(user.id, user.full_name().as_str()));
bot.send_message(chat_member.chat.id, format!("Welcome to {telegram_group_name} {username}!"))
.await?;
Ok(())
}
async fn left_chat_member(bot: Bot, chat_member: ChatMemberUpdated) -> ResponseResult<()> {
let user = chat_member.old_chat_member.user;
let username =
user.mention().unwrap_or_else(|| html::user_mention(user.id, user.full_name().as_str()));
bot.send_message(chat_member.chat.id, format!("Goodbye {username}!")).await?;
Ok(())
}