mirror of
https://github.com/house-of-vanity/desubot.git
synced 2025-07-08 04:54:08 +00:00
Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
20f366572b | |||
e5079fa584 | |||
fdc52b7198 | |||
789b918bab | |||
66a93e85b8 | |||
e13a2688ab | |||
04220703a3 | |||
9518ffd69b |
1
.gitignore
vendored
1
.gitignore
vendored
@ -8,3 +8,4 @@ memory.sqlite3
|
|||||||
/.idea
|
/.idea
|
||||||
Cargo.lock
|
Cargo.lock
|
||||||
k8s/k8s-deploy.yaml
|
k8s/k8s-deploy.yaml
|
||||||
|
/identifier.sqlite
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "desubot"
|
name = "desubot"
|
||||||
version = "0.5.7"
|
version = "0.5.9"
|
||||||
authors = ["AB <ab@hexor.ru>"]
|
authors = ["AB <ab@hexor.ru>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ Telegram bot with light group statistic and heavy spy features.
|
|||||||
|
|
||||||
== Important ==
|
== Important ==
|
||||||
* Desubot uses MyStem by Yandex for word stemming and assume that mystem binary is available in PATH.
|
* Desubot uses MyStem by Yandex for word stemming and assume that mystem binary is available in PATH.
|
||||||
On Windows it may be placed on working directory. Both Linux and Windows mystem binary is in repo.
|
* ubuntu deps: libssl-dev libsqlite3-dev cmake libfreetype-dev
|
||||||
|
|
||||||
|
|
||||||
## License
|
## License
|
@ -1,5 +1,5 @@
|
|||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
static CODE_HELP: &str = "<b>Code highlighter</b>
|
pub(crate) static CODE_HELP: &str = "<b>Code highlighter</b>
|
||||||
|
|
||||||
<i>Usage</i>
|
<i>Usage</i>
|
||||||
<pre>/code
|
<pre>/code
|
||||||
@ -7,7 +7,7 @@ static CODE_HELP: &str = "<b>Code highlighter</b>
|
|||||||
#<lang - JS by default> #<theme - Dracula by default></pre>
|
#<lang - JS by default> #<theme - Dracula by default></pre>
|
||||||
|
|
||||||
Language may be defined by both name and extension - Rust, rs...
|
Language may be defined by both name and extension - Rust, rs...
|
||||||
Max lines - 80
|
Max length - 4000
|
||||||
|
|
||||||
List of themes:
|
List of themes:
|
||||||
1337
|
1337
|
||||||
|
427
assets/stop-words.txt
Normal file
427
assets/stop-words.txt
Normal file
@ -0,0 +1,427 @@
|
|||||||
|
а
|
||||||
|
в
|
||||||
|
г
|
||||||
|
е
|
||||||
|
ж
|
||||||
|
и
|
||||||
|
к
|
||||||
|
м
|
||||||
|
о
|
||||||
|
с
|
||||||
|
т
|
||||||
|
у
|
||||||
|
я
|
||||||
|
бы
|
||||||
|
stat
|
||||||
|
вообще
|
||||||
|
ThreadTopBot
|
||||||
|
/stat
|
||||||
|
во
|
||||||
|
вы
|
||||||
|
да
|
||||||
|
до
|
||||||
|
ее
|
||||||
|
ей
|
||||||
|
ею
|
||||||
|
её
|
||||||
|
же
|
||||||
|
за
|
||||||
|
из
|
||||||
|
им
|
||||||
|
их
|
||||||
|
ли
|
||||||
|
мы
|
||||||
|
на
|
||||||
|
не
|
||||||
|
ни
|
||||||
|
но
|
||||||
|
ну
|
||||||
|
нх
|
||||||
|
об
|
||||||
|
он
|
||||||
|
от
|
||||||
|
по
|
||||||
|
со
|
||||||
|
та
|
||||||
|
те
|
||||||
|
то
|
||||||
|
ту
|
||||||
|
ты
|
||||||
|
уж
|
||||||
|
без
|
||||||
|
был
|
||||||
|
вам
|
||||||
|
вас
|
||||||
|
ваш
|
||||||
|
вон
|
||||||
|
вот
|
||||||
|
все
|
||||||
|
всю
|
||||||
|
вся
|
||||||
|
всё
|
||||||
|
где
|
||||||
|
год
|
||||||
|
два
|
||||||
|
две
|
||||||
|
дел
|
||||||
|
для
|
||||||
|
его
|
||||||
|
ему
|
||||||
|
еще
|
||||||
|
ещё
|
||||||
|
или
|
||||||
|
ими
|
||||||
|
имя
|
||||||
|
как
|
||||||
|
кем
|
||||||
|
ком
|
||||||
|
кто
|
||||||
|
лет
|
||||||
|
мне
|
||||||
|
мог
|
||||||
|
мож
|
||||||
|
мои
|
||||||
|
мой
|
||||||
|
мор
|
||||||
|
моя
|
||||||
|
моё
|
||||||
|
над
|
||||||
|
нам
|
||||||
|
нас
|
||||||
|
наш
|
||||||
|
нее
|
||||||
|
ней
|
||||||
|
нем
|
||||||
|
нет
|
||||||
|
нею
|
||||||
|
неё
|
||||||
|
них
|
||||||
|
оба
|
||||||
|
она
|
||||||
|
они
|
||||||
|
оно
|
||||||
|
под
|
||||||
|
пор
|
||||||
|
при
|
||||||
|
про
|
||||||
|
раз
|
||||||
|
сам
|
||||||
|
сих
|
||||||
|
так
|
||||||
|
там
|
||||||
|
тем
|
||||||
|
тех
|
||||||
|
том
|
||||||
|
тот
|
||||||
|
тою
|
||||||
|
три
|
||||||
|
тут
|
||||||
|
уже
|
||||||
|
чем
|
||||||
|
что
|
||||||
|
эта
|
||||||
|
эти
|
||||||
|
это
|
||||||
|
эту
|
||||||
|
алло
|
||||||
|
буду
|
||||||
|
будь
|
||||||
|
бывь
|
||||||
|
была
|
||||||
|
были
|
||||||
|
было
|
||||||
|
быть
|
||||||
|
вами
|
||||||
|
ваша
|
||||||
|
ваше
|
||||||
|
ваши
|
||||||
|
ведь
|
||||||
|
весь
|
||||||
|
вниз
|
||||||
|
всем
|
||||||
|
всех
|
||||||
|
всею
|
||||||
|
года
|
||||||
|
году
|
||||||
|
даже
|
||||||
|
двух
|
||||||
|
день
|
||||||
|
если
|
||||||
|
есть
|
||||||
|
зато
|
||||||
|
кого
|
||||||
|
кому
|
||||||
|
куда
|
||||||
|
лишь
|
||||||
|
люди
|
||||||
|
мало
|
||||||
|
меля
|
||||||
|
меня
|
||||||
|
мимо
|
||||||
|
мира
|
||||||
|
мной
|
||||||
|
мною
|
||||||
|
мочь
|
||||||
|
надо
|
||||||
|
нами
|
||||||
|
наша
|
||||||
|
наше
|
||||||
|
наши
|
||||||
|
него
|
||||||
|
нему
|
||||||
|
ниже
|
||||||
|
ними
|
||||||
|
один
|
||||||
|
пока
|
||||||
|
пора
|
||||||
|
пять
|
||||||
|
рано
|
||||||
|
сама
|
||||||
|
сами
|
||||||
|
само
|
||||||
|
саму
|
||||||
|
свое
|
||||||
|
свои
|
||||||
|
свою
|
||||||
|
себе
|
||||||
|
себя
|
||||||
|
семь
|
||||||
|
стал
|
||||||
|
суть
|
||||||
|
твой
|
||||||
|
твоя
|
||||||
|
твоё
|
||||||
|
тебе
|
||||||
|
тебя
|
||||||
|
теми
|
||||||
|
того
|
||||||
|
тоже
|
||||||
|
тому
|
||||||
|
туда
|
||||||
|
хоть
|
||||||
|
хотя
|
||||||
|
чаще
|
||||||
|
чего
|
||||||
|
чему
|
||||||
|
чтоб
|
||||||
|
чуть
|
||||||
|
этим
|
||||||
|
этих
|
||||||
|
этой
|
||||||
|
этом
|
||||||
|
этот
|
||||||
|
более
|
||||||
|
будем
|
||||||
|
будет
|
||||||
|
будто
|
||||||
|
будут
|
||||||
|
вверх
|
||||||
|
вдали
|
||||||
|
вдруг
|
||||||
|
везде
|
||||||
|
внизу
|
||||||
|
время
|
||||||
|
всего
|
||||||
|
всеми
|
||||||
|
всему
|
||||||
|
всюду
|
||||||
|
давно
|
||||||
|
даром
|
||||||
|
долго
|
||||||
|
друго
|
||||||
|
занят
|
||||||
|
затем
|
||||||
|
зачем
|
||||||
|
здесь
|
||||||
|
иметь
|
||||||
|
какая
|
||||||
|
какой
|
||||||
|
когда
|
||||||
|
кроме
|
||||||
|
лучше
|
||||||
|
между
|
||||||
|
менее
|
||||||
|
много
|
||||||
|
могут
|
||||||
|
может
|
||||||
|
можно
|
||||||
|
можхо
|
||||||
|
назад
|
||||||
|
низко
|
||||||
|
нужно
|
||||||
|
одной
|
||||||
|
около
|
||||||
|
опять
|
||||||
|
очень
|
||||||
|
перед
|
||||||
|
позже
|
||||||
|
после
|
||||||
|
потом
|
||||||
|
почти
|
||||||
|
пятый
|
||||||
|
разве
|
||||||
|
рядом
|
||||||
|
самим
|
||||||
|
самих
|
||||||
|
самой
|
||||||
|
самом
|
||||||
|
своей
|
||||||
|
своих
|
||||||
|
сеаой
|
||||||
|
снова
|
||||||
|
собой
|
||||||
|
собою
|
||||||
|
такая
|
||||||
|
также
|
||||||
|
такие
|
||||||
|
такое
|
||||||
|
такой
|
||||||
|
тобой
|
||||||
|
тобою
|
||||||
|
тогда
|
||||||
|
тысяч
|
||||||
|
уметь
|
||||||
|
часто
|
||||||
|
через
|
||||||
|
чтобы
|
||||||
|
шесть
|
||||||
|
этими
|
||||||
|
этого
|
||||||
|
этому
|
||||||
|
близко
|
||||||
|
больше
|
||||||
|
будете
|
||||||
|
будешь
|
||||||
|
бывает
|
||||||
|
важная
|
||||||
|
важное
|
||||||
|
важные
|
||||||
|
важный
|
||||||
|
вокруг
|
||||||
|
восемь
|
||||||
|
всегда
|
||||||
|
второй
|
||||||
|
далеко
|
||||||
|
дальше
|
||||||
|
девять
|
||||||
|
десять
|
||||||
|
должно
|
||||||
|
другая
|
||||||
|
другие
|
||||||
|
других
|
||||||
|
другое
|
||||||
|
другой
|
||||||
|
занята
|
||||||
|
занято
|
||||||
|
заняты
|
||||||
|
значит
|
||||||
|
именно
|
||||||
|
иногда
|
||||||
|
каждая
|
||||||
|
каждое
|
||||||
|
каждые
|
||||||
|
каждый
|
||||||
|
кругом
|
||||||
|
меньше
|
||||||
|
начала
|
||||||
|
нельзя
|
||||||
|
нибудь
|
||||||
|
никуда
|
||||||
|
ничего
|
||||||
|
обычно
|
||||||
|
однако
|
||||||
|
одного
|
||||||
|
отсюда
|
||||||
|
первый
|
||||||
|
потому
|
||||||
|
почему
|
||||||
|
просто
|
||||||
|
против
|
||||||
|
раньше
|
||||||
|
самими
|
||||||
|
самого
|
||||||
|
самому
|
||||||
|
своего
|
||||||
|
сейчас
|
||||||
|
сказал
|
||||||
|
совсем
|
||||||
|
теперь
|
||||||
|
только
|
||||||
|
третий
|
||||||
|
хорошо
|
||||||
|
хотеть
|
||||||
|
хочешь
|
||||||
|
четыре
|
||||||
|
шестой
|
||||||
|
восьмой
|
||||||
|
впрочем
|
||||||
|
времени
|
||||||
|
говорил
|
||||||
|
говорит
|
||||||
|
девятый
|
||||||
|
десятый
|
||||||
|
кажется
|
||||||
|
конечно
|
||||||
|
которая
|
||||||
|
которой
|
||||||
|
которые
|
||||||
|
который
|
||||||
|
которых
|
||||||
|
наверху
|
||||||
|
наконец
|
||||||
|
недавно
|
||||||
|
немного
|
||||||
|
нередко
|
||||||
|
никогда
|
||||||
|
однажды
|
||||||
|
посреди
|
||||||
|
сегодня
|
||||||
|
седьмой
|
||||||
|
сказала
|
||||||
|
сказать
|
||||||
|
сколько
|
||||||
|
слишком
|
||||||
|
сначала
|
||||||
|
спасибо
|
||||||
|
двадцать
|
||||||
|
довольно
|
||||||
|
которого
|
||||||
|
наиболее
|
||||||
|
недалеко
|
||||||
|
особенно
|
||||||
|
отовсюду
|
||||||
|
двадцатый
|
||||||
|
миллионов
|
||||||
|
несколько
|
||||||
|
прекрасно
|
||||||
|
процентов
|
||||||
|
четвертый
|
||||||
|
двенадцать
|
||||||
|
непрерывно
|
||||||
|
пожалуйста
|
||||||
|
пятнадцать
|
||||||
|
семнадцать
|
||||||
|
тринадцать
|
||||||
|
двенадцатый
|
||||||
|
одиннадцать
|
||||||
|
пятнадцатый
|
||||||
|
семнадцатый
|
||||||
|
тринадцатый
|
||||||
|
шестнадцать
|
||||||
|
восемнадцать
|
||||||
|
девятнадцать
|
||||||
|
одиннадцатый
|
||||||
|
четырнадцать
|
||||||
|
шестнадцатый
|
||||||
|
восемнадцатый
|
||||||
|
девятнадцатый
|
||||||
|
действительно
|
||||||
|
четырнадцатый
|
||||||
|
многочисленная
|
||||||
|
многочисленное
|
||||||
|
многочисленные
|
||||||
|
многочисленный
|
||||||
|
ага
|
||||||
|
делать
|
||||||
|
писать
|
||||||
|
бот
|
@ -21,6 +21,7 @@ use syntect::highlighting::Theme;
|
|||||||
use syntect::parsing::SyntaxReference;
|
use syntect::parsing::SyntaxReference;
|
||||||
use syntect::util::LinesWithEndings;
|
use syntect::util::LinesWithEndings;
|
||||||
use telegram_bot::prelude::*;
|
use telegram_bot::prelude::*;
|
||||||
|
use telegram_bot::*;
|
||||||
use telegram_bot::{Api, Message, ParseMode, UserId};
|
use telegram_bot::{Api, Message, ParseMode, UserId};
|
||||||
|
|
||||||
include!("../assets/help_text.rs");
|
include!("../assets/help_text.rs");
|
||||||
@ -46,6 +47,9 @@ pub struct Sql {
|
|||||||
pub struct Code {
|
pub struct Code {
|
||||||
pub data: String,
|
pub data: String,
|
||||||
}
|
}
|
||||||
|
pub struct Scheme {
|
||||||
|
pub data: String,
|
||||||
|
}
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
pub trait Execute {
|
pub trait Execute {
|
||||||
@ -59,6 +63,68 @@ pub trait Execute {
|
|||||||
) -> Result<(), Error>;
|
) -> Result<(), Error>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[async_trait]
|
||||||
|
impl Execute for Scheme {
|
||||||
|
async fn exec(&self, api: &Api, message: &Message) -> Result<(), Error> {
|
||||||
|
match api
|
||||||
|
.send(
|
||||||
|
message
|
||||||
|
.text_reply(format!(
|
||||||
|
"{}{}{}",
|
||||||
|
"<pre>",
|
||||||
|
include_str!("../assets/scheme.sql").to_string(),
|
||||||
|
"</pre>"
|
||||||
|
))
|
||||||
|
.parse_mode(ParseMode::Html),
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
Ok(_) => debug!("/scheme command sent to {}", message.chat.id()),
|
||||||
|
Err(_) => warn!("/scheme command sent failed to {}", message.chat.id()),
|
||||||
|
};
|
||||||
|
match {
|
||||||
|
Code {
|
||||||
|
data: format!(
|
||||||
|
"{}{}",
|
||||||
|
include_str!("../assets/scheme.sql").to_string(),
|
||||||
|
"\n#sql"
|
||||||
|
),
|
||||||
|
}
|
||||||
|
.exec_with_result(&api, &message)
|
||||||
|
.await
|
||||||
|
} {
|
||||||
|
Ok(path) => {
|
||||||
|
let file = InputFileUpload::with_path(path.clone());
|
||||||
|
// api.send(message.chat.document(&file)).await?;
|
||||||
|
//
|
||||||
|
// // Send an image from disk
|
||||||
|
api.send(message.chat.document(&file)).await?;
|
||||||
|
//debug!("{:#?}", formatter);
|
||||||
|
let _ = std::fs::remove_file(&path);
|
||||||
|
}
|
||||||
|
Err(_) => {
|
||||||
|
let _ = api
|
||||||
|
.send(message.text_reply(CODE_HELP).parse_mode(ParseMode::Html))
|
||||||
|
.await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn exec_with_result(&self, api: &Api, message: &Message) -> Result<String, Error> {
|
||||||
|
unimplemented!()
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn exec_mystem(
|
||||||
|
&self,
|
||||||
|
api: &Api,
|
||||||
|
message: &Message,
|
||||||
|
mystem: &mut MyStem,
|
||||||
|
) -> Result<(), Error> {
|
||||||
|
unimplemented!()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Execute for Sql {
|
impl Execute for Sql {
|
||||||
async fn exec(&self, api: &Api, message: &Message) -> Result<(), Error> {
|
async fn exec(&self, api: &Api, message: &Message) -> Result<(), Error> {
|
||||||
@ -328,7 +394,7 @@ impl Execute for Markov {
|
|||||||
let mut sentences = chain.generate();
|
let mut sentences = chain.generate();
|
||||||
let mut msg = String::new();
|
let mut msg = String::new();
|
||||||
for _ in 1..rand::thread_rng().gen_range(2, 10) {
|
for _ in 1..rand::thread_rng().gen_range(2, 10) {
|
||||||
msg = format!("{} {}", msg, sentences.pop().unwrap());
|
msg = format!("{} {}", msg, sentences.pop().unwrap_or(" ".into()));
|
||||||
}
|
}
|
||||||
match api
|
match api
|
||||||
.send(message.text_reply(msg.trim()).parse_mode(ParseMode::Html))
|
.send(message.text_reply(msg.trim()).parse_mode(ParseMode::Html))
|
||||||
@ -571,9 +637,6 @@ impl Execute for Code {
|
|||||||
.split("\n")
|
.split("\n")
|
||||||
.map(|s| s.to_string())
|
.map(|s| s.to_string())
|
||||||
.collect();
|
.collect();
|
||||||
if lines.len() >= 81 {
|
|
||||||
return Err(CodeHighlightningError);
|
|
||||||
}
|
|
||||||
let last_line = &lines[lines.len() - 1];
|
let last_line = &lines[lines.len() - 1];
|
||||||
|
|
||||||
let tags = last_line
|
let tags = last_line
|
||||||
|
28
src/db.rs
28
src/db.rs
@ -1,3 +1,5 @@
|
|||||||
|
#[allow(unused_mut)]
|
||||||
|
#[allow(dead_code)]
|
||||||
use crate::errors;
|
use crate::errors;
|
||||||
use crate::utils;
|
use crate::utils;
|
||||||
use rusqlite::{named_params, params, Connection, Error, Result};
|
use rusqlite::{named_params, params, Connection, Error, Result};
|
||||||
@ -34,6 +36,30 @@ pub(crate) fn update_scheme() -> Result<()> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) fn load_stopwords() -> Result<()> {
|
||||||
|
info!("Populating stop words wait please.");
|
||||||
|
let conn = open()?;
|
||||||
|
for table in include_str!("../assets/stop-words.txt")
|
||||||
|
.split('\n')
|
||||||
|
.into_iter()
|
||||||
|
{
|
||||||
|
let word = table.trim();
|
||||||
|
if word != "" {
|
||||||
|
let mut _stmt = conn
|
||||||
|
.prepare_cached(
|
||||||
|
"
|
||||||
|
INSERT OR IGNORE INTO
|
||||||
|
stop_words('word')
|
||||||
|
VALUES (:word)
|
||||||
|
",
|
||||||
|
)?
|
||||||
|
.insert(params![word]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
info!("Stop words updated.");
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn get_user(id: telegram_bot::UserId) -> Result<telegram_bot::User, errors::Error> {
|
pub(crate) fn get_user(id: telegram_bot::UserId) -> Result<telegram_bot::User, errors::Error> {
|
||||||
let conn = open()?;
|
let conn = open()?;
|
||||||
let mut stmt = conn.prepare_cached(
|
let mut stmt = conn.prepare_cached(
|
||||||
@ -447,7 +473,7 @@ pub(crate) async fn add_sentence(
|
|||||||
Err(e) => panic!("SQLITE3 Error: Relations failed: {:?}", e),
|
Err(e) => panic!("SQLITE3 Error: Relations failed: {:?}", e),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(_) => debug!("Word {} is in stop list.", &word.lex[0].lex),
|
Err(_) => debug!("Word {} is in a stop list.", &word.lex[0].lex),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
conn.execute("END TRANSACTION", params![]);
|
conn.execute("END TRANSACTION", params![]);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//use crate::commands::Command;
|
//use crate::commands::Command;
|
||||||
use crate::commands::{Code, Execute, Here, Markov, MarkovAll, Omedeto, Sql, Top};
|
use crate::commands::{Code, Execute, Here, Markov, MarkovAll, Omedeto, Scheme, Sql, Top};
|
||||||
use crate::db;
|
use crate::db;
|
||||||
use crate::errors;
|
use crate::errors;
|
||||||
use crate::utils;
|
use crate::utils;
|
||||||
@ -38,11 +38,30 @@ pub async fn handler(
|
|||||||
.await
|
.await
|
||||||
} {
|
} {
|
||||||
Ok(path) => {
|
Ok(path) => {
|
||||||
|
let mut cnt_lines = 0;
|
||||||
|
for _ in s.lines() {
|
||||||
|
cnt_lines = cnt_lines + 1;
|
||||||
|
}
|
||||||
|
let mut cnt_chars = 0;
|
||||||
|
for _ in s.chars() {
|
||||||
|
cnt_chars = cnt_chars + 1;
|
||||||
|
}
|
||||||
let file = InputFileUpload::with_path(path.clone());
|
let file = InputFileUpload::with_path(path.clone());
|
||||||
|
info!("lines: {}, chars: {}", cnt_lines, cnt_chars);
|
||||||
// api.send(message.chat.document(&file)).await?;
|
// api.send(message.chat.document(&file)).await?;
|
||||||
//
|
//
|
||||||
// // Send an image from disk
|
// // Send an image from disk
|
||||||
|
if cnt_chars > 4000 {
|
||||||
|
let _ = api
|
||||||
|
.send(message.text_reply(CODE_HELP).parse_mode(ParseMode::Html))
|
||||||
|
.await?;
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
if cnt_lines < 81 {
|
||||||
api.send(message.chat.photo(&file)).await?;
|
api.send(message.chat.photo(&file)).await?;
|
||||||
|
} else {
|
||||||
|
api.send(message.chat.document(&file)).await?;
|
||||||
|
}
|
||||||
//debug!("{:#?}", formatter);
|
//debug!("{:#?}", formatter);
|
||||||
let _ = std::fs::remove_file(&path);
|
let _ = std::fs::remove_file(&path);
|
||||||
}
|
}
|
||||||
@ -116,6 +135,13 @@ pub async fn handler(
|
|||||||
.exec(&api, &message)
|
.exec(&api, &message)
|
||||||
.await?
|
.await?
|
||||||
}
|
}
|
||||||
|
s if s =="/scheme" || s == "/schema" => {
|
||||||
|
Scheme {
|
||||||
|
data: "".to_string(),
|
||||||
|
}
|
||||||
|
.exec(&api, &message)
|
||||||
|
.await?
|
||||||
|
}
|
||||||
"/omedeto" => {
|
"/omedeto" => {
|
||||||
Omedeto {
|
Omedeto {
|
||||||
data: "".to_string(),
|
data: "".to_string(),
|
||||||
|
@ -30,6 +30,10 @@ async fn main() -> Result<(), errors::Error> {
|
|||||||
Ok(_) => {}
|
Ok(_) => {}
|
||||||
Err(e) => panic!("Database error: {:?}", e),
|
Err(e) => panic!("Database error: {:?}", e),
|
||||||
}
|
}
|
||||||
|
match db::load_stopwords() {
|
||||||
|
Ok(_) => {}
|
||||||
|
Err(e) => panic!("Database error: {:?}", e),
|
||||||
|
}
|
||||||
let token = match env::var("TELEGRAM_BOT_TOKEN") {
|
let token = match env::var("TELEGRAM_BOT_TOKEN") {
|
||||||
Ok(token) => token,
|
Ok(token) => token,
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
|
Reference in New Issue
Block a user