1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// Copyright 2021 - 2021, Rupansh Sekar and the Kilogramme (TBD) contributors
// SPDX-License-Identifier: MPL-2.0
use crate::{
    consts::manage::*,
    errors::UserBotError,
    userbot::{CommandHandlerResult, UserBot},
};
use grammers_client::types::{InputMessage, Message};

/// pin "reply-to" message
///
/// ## Scope
/// Group Chat
///
/// ## Usage(s)
/// `<reply> !pin`
///
//UserBotCmd !pin
pub async fn pin_handler(bot: &mut UserBot, message: &mut Message) -> CommandHandlerResult {
    let reply_id = message
        .reply_to_message_id()
        .ok_or(UserBotError::NoArguments)?;
    bot.client.pin_message(&message.chat(), reply_id).await?;

    message.edit(InputMessage::markdown(PIN_TXT)).await?;
    Ok(())
}

/// unpin "reply-to" message
///
/// ## Scope
/// Group Chat
///
/// ## Usage(s)
/// `<reply> !unpin`
///
//UserBotCmd !unpin
pub async fn unpin_handler(bot: &mut UserBot, message: &mut Message) -> CommandHandlerResult {
    bot.client.unpin_all_messages(&message.chat()).await?;

    message.edit(InputMessage::markdown(UNPIN_TXT)).await?;
    Ok(())
}

/// promote a user to admin
///
/// ## Scope
/// Group Chat
///
/// ## Usage(s)
/// `<reply> !promote` \
/// `!promote @username`
///
//UserBotCmd !promote
pub async fn promote_handler(bot: &mut UserBot, message: &mut Message) -> CommandHandlerResult {
    let user = bot.get_arg_user(message).await?;

    bot.client
        .set_admin_rights(&message.chat(), &user)
        .load_current()
        .await?
        .pin_messages(true)
        .delete_messages(true)
        .ban_users(true)
        .invite_users(true)
        .await?;

    message.edit(InputMessage::markdown(PROMOTE_TXT)).await?;
    Ok(())
}

/// demote an admin
///
/// ## Scope
/// Group Chat
///
/// ## Usage(s)
/// `<reply> !demote` \
/// `!demote @username`
///
//UserBotCmd !demote
pub async fn demote_handler(bot: &mut UserBot, message: &mut Message) -> CommandHandlerResult {
    let chat = message.chat();
    let user = bot.get_arg_user(message).await?;

    bot.client.set_admin_rights(&chat, &user).await?;

    message.edit(InputMessage::markdown(DEMOTE_TXT)).await?;
    Ok(())
}