first commit
This commit is contained in:
commit
44de5a191a
|
@ -0,0 +1 @@
|
||||||
|
/target
|
|
@ -0,0 +1,8 @@
|
||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="EMPTY_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/doryan-facker.iml" filepath="$PROJECT_DIR$/.idea/doryan-facker.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,13 @@
|
||||||
|
[package]
|
||||||
|
name = "doryan-facker"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
teloxide = { version = "0.12", features = ["macros"] }
|
||||||
|
log = "0.4"
|
||||||
|
pretty_env_logger = "0.5.0"
|
||||||
|
tokio = { version = "1.8", features = ["rt-multi-thread", "macros"] }
|
||||||
|
chrono = "0.4.34"
|
|
@ -0,0 +1,62 @@
|
||||||
|
pub mod ban{
|
||||||
|
use teloxide::Bot;
|
||||||
|
use teloxide::requests::Requester;
|
||||||
|
use teloxide::types::{ChatId, Message, MessageKind};
|
||||||
|
|
||||||
|
pub async fn ban_user(
|
||||||
|
replied_message: Option<&Message>,
|
||||||
|
reason: Option<String>,
|
||||||
|
bot: &Bot,
|
||||||
|
chat_id: ChatId) -> Result<String, String>
|
||||||
|
{
|
||||||
|
if let None = replied_message {
|
||||||
|
bot.send_message(
|
||||||
|
chat_id,
|
||||||
|
"Ответьте на сообщение человека, которого вы хотите забанить".to_string()
|
||||||
|
).await.unwrap();
|
||||||
|
Err("Ответьте на сообщение человека, которого вы хотите забанить".to_string())
|
||||||
|
} else if let None = reason {
|
||||||
|
bot.send_message(chat_id, "Не указана причина бана").await
|
||||||
|
.unwrap();
|
||||||
|
Err("Не указана причина бана".to_string())
|
||||||
|
} else {
|
||||||
|
match &replied_message.unwrap().kind {
|
||||||
|
MessageKind::Common(message) => {
|
||||||
|
if let None = message.from {
|
||||||
|
bot.send_message(chat_id, "Сообщение не найдено")
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
Err("Сообщение не найдено".to_string())
|
||||||
|
} else if let Some(user) = &message.from {
|
||||||
|
match bot.ban_chat_member(chat_id, user.id).await {
|
||||||
|
Ok(_) => {
|
||||||
|
bot.send_message(
|
||||||
|
chat_id,
|
||||||
|
format!("Пользователь {} был заблокирован по причине {}",
|
||||||
|
user.first_name,
|
||||||
|
reason.unwrap()
|
||||||
|
)
|
||||||
|
).await.unwrap();
|
||||||
|
Ok("Демократия была совершена".to_string())
|
||||||
|
}
|
||||||
|
Err(error) => {
|
||||||
|
bot.send_message(chat_id, error.to_string())
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
Err(error.to_string())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
bot.send_message(chat_id, "Ошибка номер хуй")
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
Err("Ошибка номер хуй".to_string())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
Err("тест".to_string())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
pub mod is_admin{
|
||||||
|
use teloxide::Bot;
|
||||||
|
use teloxide::types::Message;
|
||||||
|
use teloxide::requests::Requester;
|
||||||
|
|
||||||
|
pub async fn is_admin_check(message: &Message, bot: &Bot) -> bool {
|
||||||
|
if let None = message.from() {
|
||||||
|
bot.send_message(message.chat.id, "Пользователь не найден")
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
let is_admin = bot.get_chat_member(
|
||||||
|
message.chat.id,
|
||||||
|
message.from().unwrap().id
|
||||||
|
).await;
|
||||||
|
|
||||||
|
match is_admin {
|
||||||
|
Ok(chat_member) => {
|
||||||
|
if chat_member.is_administrator() || chat_member.is_owner() {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
bot.send_message(message.chat.id, "Команда доступна только администраторам")
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(error) => {
|
||||||
|
bot.send_message(message.chat.id, error.to_string())
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,80 @@
|
||||||
|
mod ban;
|
||||||
|
mod mute;
|
||||||
|
mod unmute;
|
||||||
|
mod is_admin;
|
||||||
|
|
||||||
|
use teloxide::prelude::*;
|
||||||
|
use crate::ban::ban::ban_user;
|
||||||
|
use crate::mute::mute::mute_user;
|
||||||
|
use crate::unmute::unmute::unmute;
|
||||||
|
use teloxide::utils::command::BotCommands;
|
||||||
|
use crate::is_admin::is_admin::is_admin_check;
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
pretty_env_logger::init();
|
||||||
|
log::info!("Starting throw dice bot...");
|
||||||
|
|
||||||
|
let bot = Bot::new("6941223962:AAG4SVKKlUOPlgJTINLfxtD09duB_YSkHOw".to_string());
|
||||||
|
|
||||||
|
Command::repl(bot, callback).await;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(BotCommands, Clone)]
|
||||||
|
#[command(rename_rule = "lowercase", description = "Поддерживаемые команды:")]
|
||||||
|
enum Command {
|
||||||
|
#[command(description = "Команда для отображения инструкции")]
|
||||||
|
Help,
|
||||||
|
#[command(description = "Снимается мьют."
|
||||||
|
)]
|
||||||
|
Unmute,
|
||||||
|
#[command(description = "Банит человека. Для этого необходимо \
|
||||||
|
1. Сделать реплай на сообщение человека, которого вы хотите забанить; \
|
||||||
|
2. Указать причину бана."
|
||||||
|
)]
|
||||||
|
NurgbergsCongress(String),
|
||||||
|
#[command(description = "Мьют человека. Для этого необходимо \
|
||||||
|
1. Сделать реплай на сообщение человека, которого вы хотите замьютить; \
|
||||||
|
2. Указать множитель мьюта."
|
||||||
|
)]
|
||||||
|
Mute(i64),
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn callback(bot: Bot, msg: Message, commands: Command) -> ResponseResult<()> {
|
||||||
|
match commands {
|
||||||
|
Command::Help => {
|
||||||
|
bot.send_message(msg.chat.id, Command::descriptions().to_string()).await?;
|
||||||
|
},
|
||||||
|
Command::NurgbergsCongress(reason) => {
|
||||||
|
if is_admin_check(&msg, &bot).await {
|
||||||
|
let reason_result = if reason.is_empty() { None } else { Some(reason) };
|
||||||
|
let _ = ban_user(
|
||||||
|
msg.reply_to_message(),
|
||||||
|
reason_result,
|
||||||
|
&bot,
|
||||||
|
msg.chat.id,
|
||||||
|
).await;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Command::Mute(multiplier) => {
|
||||||
|
if is_admin_check(&msg, &bot).await {
|
||||||
|
let _ = mute_user(
|
||||||
|
msg.reply_to_message(),
|
||||||
|
multiplier,
|
||||||
|
&bot,
|
||||||
|
msg.chat.id,
|
||||||
|
).await;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Command::Unmute => {
|
||||||
|
if is_admin_check(&msg, &bot).await {
|
||||||
|
let _ = unmute(
|
||||||
|
msg.reply_to_message(),
|
||||||
|
&bot,
|
||||||
|
msg.chat.id,
|
||||||
|
).await;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Ok(())
|
||||||
|
}
|
|
@ -0,0 +1,81 @@
|
||||||
|
pub mod mute {
|
||||||
|
use teloxide::Bot;
|
||||||
|
use chrono::{Duration, Local};
|
||||||
|
use teloxide::requests::Requester;
|
||||||
|
use teloxide::payloads::RestrictChatMemberSetters;
|
||||||
|
use teloxide::types::{ChatId, ChatPermissions, Message, MessageKind};
|
||||||
|
|
||||||
|
pub async fn mute_user(
|
||||||
|
replied_message: Option<&Message>,
|
||||||
|
multiplier: i64,
|
||||||
|
bot: &Bot,
|
||||||
|
chat_id: ChatId) -> Result<String, String>
|
||||||
|
{
|
||||||
|
if let None = replied_message {
|
||||||
|
bot.send_message(
|
||||||
|
chat_id,
|
||||||
|
"Ответьте на сообщение человека, которого вы хотите замьютить".to_string()
|
||||||
|
).await.unwrap();
|
||||||
|
Err("Ответьте на сообщение человека, которого вы хотите замьютить".to_string())
|
||||||
|
} else {
|
||||||
|
match &replied_message.unwrap().kind {
|
||||||
|
MessageKind::Common(message) => {
|
||||||
|
if let None = message.from {
|
||||||
|
bot.send_message(chat_id, "Сообщение не найдено").await.unwrap();
|
||||||
|
Err("Сообщение не найдено".to_string())
|
||||||
|
} else if let Some(user) = &message.from {
|
||||||
|
let dice_value = bot.send_dice(chat_id)
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
.dice()
|
||||||
|
.unwrap()
|
||||||
|
.value as i64;
|
||||||
|
|
||||||
|
let duration = Local::now().naive_utc() + Duration::hours(multiplier * dice_value);
|
||||||
|
|
||||||
|
println!("{:?}", duration);
|
||||||
|
|
||||||
|
match bot.restrict_chat_member(
|
||||||
|
chat_id,
|
||||||
|
user.id,
|
||||||
|
ChatPermissions::from_bits(0).unwrap()
|
||||||
|
).until_date(duration.and_utc())
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
Ok(_) => {
|
||||||
|
bot.send_message(
|
||||||
|
chat_id,
|
||||||
|
format!("На пользователя {} повесили железный зановес на {} часов",
|
||||||
|
user.first_name,
|
||||||
|
multiplier * dice_value
|
||||||
|
)
|
||||||
|
).await
|
||||||
|
.unwrap();
|
||||||
|
Ok("Демократия была совершена".to_string())
|
||||||
|
}
|
||||||
|
Err(error) => {
|
||||||
|
bot.send_message(
|
||||||
|
chat_id,
|
||||||
|
error.to_string() + &*format!(
|
||||||
|
". Результат в часах: {}",
|
||||||
|
multiplier * dice_value
|
||||||
|
).to_string()
|
||||||
|
).await
|
||||||
|
.unwrap();
|
||||||
|
Err(error.to_string())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
bot.send_message(chat_id, "Ошибка номер хуй")
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
Err("Ошибка номер хуй".to_string())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
Err("тест".to_string())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
pub mod unmute{
|
||||||
|
use teloxide::Bot;
|
||||||
|
use teloxide::requests::Requester;
|
||||||
|
use teloxide::types::{ChatId, ChatPermissions, Message, MessageKind};
|
||||||
|
|
||||||
|
pub async fn unmute(
|
||||||
|
replied_message: Option<&Message>,
|
||||||
|
bot: &Bot,
|
||||||
|
chat_id: ChatId
|
||||||
|
) -> Result<String, String>
|
||||||
|
{
|
||||||
|
if let None = replied_message {
|
||||||
|
bot.send_message(
|
||||||
|
chat_id,
|
||||||
|
"Ответьте на сообщение человека, которого вы хотите замьютить".to_string()
|
||||||
|
).await.unwrap();
|
||||||
|
Err("Ответьте на сообщение человека, которого вы хотите замьютить".to_string())
|
||||||
|
} else {
|
||||||
|
match &replied_message.unwrap().kind {
|
||||||
|
MessageKind::Common(message) => {
|
||||||
|
if let None = message.from {
|
||||||
|
bot.send_message(chat_id, "Сообщение не найдено").await.unwrap();
|
||||||
|
Err("Сообщение не найдено".to_string())
|
||||||
|
} else if let Some(user) = &message.from {
|
||||||
|
|
||||||
|
match bot.restrict_chat_member(
|
||||||
|
chat_id,
|
||||||
|
user.id,
|
||||||
|
ChatPermissions::all()
|
||||||
|
).await
|
||||||
|
{
|
||||||
|
Ok(_) => {
|
||||||
|
bot.send_message(
|
||||||
|
chat_id,
|
||||||
|
format!("C пользователя {} сняли железный зановес", user.first_name)
|
||||||
|
).await
|
||||||
|
.unwrap();
|
||||||
|
Ok("Демократия была совершена".to_string())
|
||||||
|
}
|
||||||
|
Err(error) => {
|
||||||
|
bot.send_message(
|
||||||
|
chat_id,
|
||||||
|
error.to_string().to_string()
|
||||||
|
).await
|
||||||
|
.unwrap();
|
||||||
|
Err(error.to_string())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
bot.send_message(chat_id, "Ошибка номер хуй")
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
Err("Ошибка номер хуй".to_string())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
Err("тест".to_string())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue