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
91
92
93
94
95
96
97
|
let mut i_command = command.into_iter();
let (channel, url, iv_hash, url_re) = (
i_command.next().context(at_least)?,
i_command.next().context(at_least)?,
i_command.next(),
i_command.next());
if ! RE_USERNAME.is_match(&channel) {
core.send(format!("Usernames should be something like \"@\\[a\\-zA\\-Z]\\[a\\-zA\\-Z0\\-9\\_]+\", aren't they?\nNot {:?}", &channel), Some(sender), None)?;
return Ok(())
}
if ! RE_LINK.is_match(&url) {
core.send(format!("Link should be a link to atom/rss feed, something like \"https://domain/path\".\nNot {:?}", &url), Some(sender), None)?;
return Ok(())
}
let iv_hash = match iv_hash {
Some(hash) => {
if ! RE_IV_HASH.is_match(hash) {
core.send(format!("IV hash should be 14 hex digits.\nNot {:?}", hash), Some(sender), None)?;
return Ok(())
};
Some(*hash)
}
None => None,
};
if let Some(rex) = url_re {
let _url_rex = ReplaceCommand::new(rex).context("Regexp parsing error:")?;
};
let channel_id = i64::from(core.tg.send(telegram_bot::GetChat::new(telegram_bot::types::ChatRef::ChannelUsername(channel.to_string()))).await?.id());
let chan_adm = core.tg.send(telegram_bot::GetChatAdministrators::new(telegram_bot::types::ChatRef::ChannelUsername(channel.to_string()))).await
.context("Sorry, I have no access to that chat\\.")?;
let (mut me, mut user) = (false, false);
for admin in chan_adm {
if admin.user.id == core.my.id {
me = true;
};
if admin.user.id == sender {
user = true;
};
};
if ! me { bail!("I need to be admin on that channel\\."); };
if ! user { bail!("You should be admin on that channel\\."); };
core.send(core.update(source_id, channel, channel_id, url, iv_hash, None, sender).await?, Some(sender), None)?;
Ok(())
}
|
|
<
|
|
<
|
<
|
|
|
|
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
91
92
93
94
|
let mut i_command = command.into_iter();
let (channel, url, iv_hash, url_re) = (
i_command.next().context(at_least)?,
i_command.next().context(at_least)?,
i_command.next(),
i_command.next());
if ! RE_USERNAME.is_match(&channel) {
bail!("Usernames should be something like \"@\\[a\\-zA\\-Z]\\[a\\-zA\\-Z0\\-9\\_]+\", aren't they?\nNot {:?}", &channel);
};
if ! RE_LINK.is_match(&url) {
bail!("Link should be a link to atom/rss feed, something like \"https://domain/path\".\nNot {:?}", &url);
}
let iv_hash = match iv_hash {
Some(hash) => {
if ! RE_IV_HASH.is_match(hash) {
bail!("IV hash should be 14 hex digits.\nNot {:?}", hash);
};
Some(*hash)
}
None => None,
};
if let Some(rex) = url_re {
let _url_rex = ReplaceCommand::new(rex).context("Regexp parsing error:")?;
};
let channel_id = i64::from(core.tg.send(telegram_bot::GetChat::new(telegram_bot::types::ChatRef::ChannelUsername(channel.to_string()))).await?.id());
let chan_adm = core.tg.send(telegram_bot::GetChatAdministrators::new(telegram_bot::types::ChatRef::ChannelUsername(channel.to_string()))).await
.context("Sorry, I have no access to that chat.")?;
let (mut me, mut user) = (false, false);
for admin in chan_adm {
if admin.user.id == core.my.id {
me = true;
};
if admin.user.id == sender {
user = true;
};
};
if ! me { bail!("I need to be admin on that channel."); };
if ! user { bail!("You should be admin on that channel."); };
core.send(core.update(source_id, channel, channel_id, url, iv_hash, None, sender).await?, Some(sender), None)?;
Ok(())
}
|