Switched to teloxide 0.13
This commit is contained in:
@ -16,7 +16,7 @@ use crate::{
|
||||
locales::LocaleTypeExt,
|
||||
};
|
||||
use base64::{engine::general_purpose::STANDARD_NO_PAD as B64_ENGINE, Engine as _};
|
||||
use teloxide::types::CallbackQuery;
|
||||
use teloxide::types::{CallbackQuery, MaybeInaccessibleMessage};
|
||||
|
||||
type NameHash = Vec<u8>;
|
||||
|
||||
@ -40,7 +40,9 @@ pub enum CallbackCommand {
|
||||
|
||||
impl CallbackCommand {
|
||||
pub fn from_query(q: CallbackQuery) -> Option<Self> {
|
||||
q.message?;
|
||||
if !matches!(q.message, Some(MaybeInaccessibleMessage::Regular(_))) {
|
||||
return None;
|
||||
}
|
||||
q.data?.parse().map_err(handle_error).ok()
|
||||
}
|
||||
}
|
||||
|
@ -51,7 +51,7 @@ async fn get_master_pass(
|
||||
master_pass: String,
|
||||
) -> crate::Result<()> {
|
||||
dialogue.exit().await?;
|
||||
let user_id = msg.from().ok_or(NoUserInfo)?.id.0;
|
||||
let user_id = msg.from.as_ref().ok_or(NoUserInfo)?.id.0;
|
||||
|
||||
let text = match update_account(user_id, &db, name, field, field_value, master_pass).await {
|
||||
Ok(true) => locale.success.as_str(),
|
||||
@ -79,7 +79,7 @@ pub async fn alter(
|
||||
(hash, field): (super::NameHash, AlterableField),
|
||||
) -> crate::Result<()> {
|
||||
let user_id = q.from.id.0;
|
||||
let mut ids: MessageIds = q.message.as_ref().unwrap().into();
|
||||
let mut ids = q.get_ids();
|
||||
|
||||
let Some(name) = Account::get_name_by_hash(user_id, &hash, &db).await? else {
|
||||
bot.send_message(ids.0, &locale.account_not_found)
|
||||
|
@ -9,7 +9,7 @@ pub async fn change_locale(
|
||||
mut locale: LocaleRef,
|
||||
new_locale: LocaleType,
|
||||
) -> crate::Result<()> {
|
||||
let mut ids: MessageIds = q.message.as_ref().unwrap().into();
|
||||
let mut ids = q.get_ids();
|
||||
let user_id = q.from.id.0;
|
||||
|
||||
let is_successful = new_locale
|
||||
|
@ -15,7 +15,7 @@ async fn get_master_pass(
|
||||
) -> crate::Result<()> {
|
||||
dialogue.exit().await?;
|
||||
|
||||
let user_id = msg.from().ok_or(NoUserInfo)?.id.0;
|
||||
let user_id = msg.from.as_ref().ok_or(NoUserInfo)?.id.0;
|
||||
|
||||
let Some(account) = Account::get(user_id, &name, &db).await? else {
|
||||
bot.send_message(msg.chat.id, &locale.no_accounts_found)
|
||||
@ -47,7 +47,7 @@ pub async fn decrypt(
|
||||
locale: LocaleRef,
|
||||
hash: super::NameHash,
|
||||
) -> crate::Result<()> {
|
||||
let mut ids: MessageIds = q.message.as_ref().unwrap().into();
|
||||
let mut ids = q.get_ids();
|
||||
let user_id = q.from.id.0;
|
||||
|
||||
let Some(name) = Account::get_name_by_hash(user_id, &hash, &db).await? else {
|
||||
|
@ -13,7 +13,7 @@ async fn get_master_pass(
|
||||
) -> crate::Result<()> {
|
||||
dialogue.exit().await?;
|
||||
|
||||
let user_id = msg.from().ok_or(NoUserInfo)?.id.0;
|
||||
let user_id = msg.from.as_ref().ok_or(NoUserInfo)?.id.0;
|
||||
Account::delete(user_id, &name, &db).await?;
|
||||
|
||||
ids.alter_message(&bot, &locale.success, deletion_markup(locale), None)
|
||||
@ -30,7 +30,7 @@ pub async fn delete(
|
||||
locale: LocaleRef,
|
||||
(hash, is_command): (super::NameHash, bool),
|
||||
) -> crate::Result<()> {
|
||||
let mut ids: MessageIds = q.message.as_ref().unwrap().into();
|
||||
let mut ids = q.get_ids();
|
||||
let user_id = q.from.id.0;
|
||||
|
||||
let Some(name) = Account::get_name_by_hash(user_id, &hash, &db).await? else {
|
||||
|
@ -7,8 +7,8 @@ pub async fn delete_message(
|
||||
locale: LocaleRef,
|
||||
) -> crate::Result<()> {
|
||||
if let Some(msg) = q.message {
|
||||
if bot.delete_message(msg.chat.id, msg.id).await.is_err() {
|
||||
bot.send_message(msg.chat.id, &locale.error_deleting_message)
|
||||
if bot.delete_message(msg.chat().id, msg.id()).await.is_err() {
|
||||
bot.send_message(msg.chat().id, &locale.error_deleting_message)
|
||||
.reply_markup(deletion_markup(locale))
|
||||
.await?;
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ pub async fn get(
|
||||
hash: super::NameHash,
|
||||
) -> crate::Result<()> {
|
||||
let user_id = q.from.id.0;
|
||||
let mut ids: MessageIds = q.message.as_ref().unwrap().into();
|
||||
let mut ids = q.get_ids();
|
||||
|
||||
let Some(name) = Account::get_name_by_hash(user_id, &hash, &db).await? else {
|
||||
bot.send_message(ids.0, &locale.account_not_found)
|
||||
|
@ -7,7 +7,7 @@ pub async fn get_menu(
|
||||
locale: LocaleRef,
|
||||
) -> crate::Result<()> {
|
||||
let user_id = q.from.id.0;
|
||||
let mut ids: MessageIds = q.message.as_ref().unwrap().into();
|
||||
let mut ids = q.get_ids();
|
||||
|
||||
let markup = menu_markup("get", user_id, &db).await?;
|
||||
if markup.inline_keyboard.is_empty() {
|
||||
|
@ -17,7 +17,7 @@ async fn get_master_pass(
|
||||
) -> crate::Result<()> {
|
||||
dialogue.exit().await?;
|
||||
|
||||
let user_id = msg.from().ok_or(NoUserInfo)?.id.0;
|
||||
let user_id = msg.from.as_ref().ok_or(NoUserInfo)?.id.0;
|
||||
|
||||
let account = spawn_blocking(move || {
|
||||
DecryptedAccount {
|
||||
|
@ -6,7 +6,7 @@ pub async fn delete(
|
||||
db: Pool,
|
||||
locale: LocaleRef,
|
||||
) -> crate::Result<()> {
|
||||
let user_id = msg.from().ok_or(NoUserInfo)?.id.0;
|
||||
let user_id = msg.from.as_ref().ok_or(NoUserInfo)?.id.0;
|
||||
|
||||
let markup = menu_markup("delete1", user_id, &db).await?;
|
||||
|
||||
|
@ -12,7 +12,7 @@ async fn get_master_pass(
|
||||
_: String,
|
||||
) -> crate::Result<()> {
|
||||
dialogue.exit().await?;
|
||||
let user_id = msg.from().ok_or(NoUserInfo)?.id.0;
|
||||
let user_id = msg.from.as_ref().ok_or(NoUserInfo)?.id.0;
|
||||
|
||||
let mut txn = db.begin().await?;
|
||||
let result = (
|
||||
|
@ -29,7 +29,7 @@ async fn get_master_pass(
|
||||
dialogue.exit().await?;
|
||||
|
||||
ids.delete(&bot).await?;
|
||||
let user_id = msg.from().ok_or(NoUserInfo)?.id.0;
|
||||
let user_id = msg.from.as_ref().ok_or(NoUserInfo)?.id.0;
|
||||
let mut accounts = Vec::new();
|
||||
|
||||
{
|
||||
|
@ -6,7 +6,7 @@ pub async fn get_account(
|
||||
db: Pool,
|
||||
locale: LocaleRef,
|
||||
) -> crate::Result<()> {
|
||||
let user_id = msg.from().ok_or(NoUserInfo)?.id.0;
|
||||
let user_id = msg.from.as_ref().ok_or(NoUserInfo)?.id.0;
|
||||
|
||||
let markup = menu_markup("decrypt", user_id, &db).await?;
|
||||
|
||||
|
@ -9,7 +9,7 @@ pub async fn get_accounts(
|
||||
db: Pool,
|
||||
locale: LocaleRef,
|
||||
) -> crate::Result<()> {
|
||||
let user_id = msg.from().ok_or(NoUserInfo)?.id.0;
|
||||
let user_id = msg.from.as_ref().ok_or(NoUserInfo)?.id.0;
|
||||
let mut account_names = Account::get_names(user_id, &db);
|
||||
|
||||
let Some(mut text) = account_names.try_next().await? else {
|
||||
|
@ -38,7 +38,7 @@ async fn get_master_pass(
|
||||
) -> crate::Result<()> {
|
||||
dialogue.exit().await?;
|
||||
|
||||
let user_id = msg.from().ok_or(NoUserInfo)?.id.0;
|
||||
let user_id = msg.from.as_ref().ok_or(NoUserInfo)?.id.0;
|
||||
let mut failed = Vec::new();
|
||||
|
||||
{
|
||||
|
@ -6,7 +6,7 @@ pub async fn menu(
|
||||
db: Pool,
|
||||
locale: LocaleRef,
|
||||
) -> crate::Result<()> {
|
||||
let user_id = msg.from().ok_or(NoUserInfo)?.id.0;
|
||||
let user_id = msg.from.as_ref().ok_or(NoUserInfo)?.id.0;
|
||||
|
||||
let markup = menu_markup("get", user_id, &db).await?;
|
||||
|
||||
|
@ -16,7 +16,7 @@ async fn get_master_pass2(
|
||||
master_pass: String,
|
||||
) -> crate::Result<()> {
|
||||
dialogue.exit().await?;
|
||||
let from = msg.from().ok_or(NoUserInfo)?;
|
||||
let from = msg.from.as_ref().ok_or(NoUserInfo)?;
|
||||
let user_id = from.id.0;
|
||||
|
||||
if !hash.verify(master_pass.as_bytes()) {
|
||||
@ -82,7 +82,7 @@ pub async fn set_master_pass(
|
||||
db: Pool,
|
||||
locale: LocaleRef,
|
||||
) -> crate::Result<()> {
|
||||
let user_id = msg.from().ok_or(NoUserInfo)?.id.0;
|
||||
let user_id = msg.from.as_ref().ok_or(NoUserInfo)?.id.0;
|
||||
if MasterPass::exists(user_id, &db).await? {
|
||||
bot.send_message(msg.chat.id, &locale.master_password_is_set)
|
||||
.reply_markup(deletion_markup(locale))
|
||||
|
@ -3,7 +3,7 @@ use teloxide::{dispatching::DpHandlerDescription, dptree::Handler};
|
||||
|
||||
#[allow(clippy::needless_pass_by_value)]
|
||||
fn has_no_user_info(msg: Message) -> bool {
|
||||
msg.from().is_none()
|
||||
msg.from.is_none()
|
||||
}
|
||||
|
||||
async fn notify_about_no_user_info(
|
||||
|
@ -14,7 +14,7 @@ type DynError = Arc<dyn std::error::Error + Send + Sync>;
|
||||
/// Returns None if account exists, Some(None) if there's an account and Some(Some(DynError)) if an error occures.
|
||||
/// The String represents the error that occured
|
||||
async fn master_pass_exists(update: Update, db: Pool) -> Option<Option<DynError>> {
|
||||
let user_id = match update.user() {
|
||||
let user_id = match update.from() {
|
||||
Some(user) => user.id.0,
|
||||
None => return Some(Some(Arc::new(NoUserInfo))),
|
||||
};
|
||||
|
@ -142,7 +142,7 @@ pub trait LocaleTypeExt: Sized {
|
||||
|
||||
impl LocaleTypeExt for LocaleType {
|
||||
async fn locale_for_update(update: &Update, db: &Pool) -> Self {
|
||||
let Some(from) = update.user() else {
|
||||
let Some(from) = update.from() else {
|
||||
return Self::default();
|
||||
};
|
||||
|
||||
|
@ -28,6 +28,6 @@ async fn main() -> Result<()> {
|
||||
|
||||
entity::migrate(&pool).await?;
|
||||
|
||||
dispatching::get_dispatcher(token, pool).dispatch().await;
|
||||
Box::pin(dispatching::get_dispatcher(token, pool).dispatch()).await;
|
||||
Ok(())
|
||||
}
|
||||
|
@ -5,7 +5,7 @@ pub use crate::{
|
||||
first_handler, handler,
|
||||
locales::LocaleRef,
|
||||
markups::{deletion_markup, menu_markup},
|
||||
state::{Handler, MainDialogue, MessageIds, PackagedHandler, State},
|
||||
state::{CallbackMessageIdExt as _, Handler, MainDialogue, MessageIds, PackagedHandler, State},
|
||||
};
|
||||
pub use futures::{StreamExt as _, TryStreamExt as _};
|
||||
pub use teloxide::{adaptors::Throttle, prelude::*};
|
||||
|
@ -3,7 +3,7 @@
|
||||
mod generic;
|
||||
mod handler;
|
||||
|
||||
pub use handler::{Handler, MessageIds, Packaged as PackagedHandler};
|
||||
pub use handler::{CallbackMessageIdExt, Handler, MessageIds, Packaged as PackagedHandler};
|
||||
|
||||
crate::export_handlers!(
|
||||
get_login,
|
||||
|
@ -8,7 +8,7 @@ async fn check_master_pass(
|
||||
locale: LocaleRef,
|
||||
master_pass: &str,
|
||||
) -> crate::Result<Option<String>> {
|
||||
let user_id = msg.from().ok_or(NoUserInfo)?.id.0;
|
||||
let user_id = msg.from.as_ref().ok_or(NoUserInfo)?.id.0;
|
||||
let Some(model) = MasterPass::get(user_id, db).await? else {
|
||||
handle_error(anyhow::anyhow!(
|
||||
"User was put into the GetMasterPass state with no master password set"
|
||||
|
@ -7,7 +7,7 @@ async fn check_new_account_name(
|
||||
locale: LocaleRef,
|
||||
name: &str,
|
||||
) -> crate::Result<Option<String>> {
|
||||
let user_id = msg.from().ok_or(NoUserInfo)?.id.0;
|
||||
let user_id = msg.from.as_ref().ok_or(NoUserInfo)?.id.0;
|
||||
|
||||
if Account::exists(user_id, name, db).await? {
|
||||
Ok(Some(locale.account_already_exists.to_owned()))
|
||||
|
@ -181,7 +181,7 @@ pub async fn get_user(
|
||||
locale: LocaleRef,
|
||||
handler: PackagedHandler<User>,
|
||||
) -> crate::Result<()> {
|
||||
let user_id = msg.from().ok_or(NoUserInfo)?.id.0;
|
||||
let user_id = msg.from.as_ref().ok_or(NoUserInfo)?.id.0;
|
||||
|
||||
let mut handler = handler.lock().await;
|
||||
if handler.func.is_none() {
|
||||
|
@ -4,7 +4,7 @@ use std::{mem, sync::Arc};
|
||||
use teloxide::{
|
||||
errors::{ApiError, RequestError},
|
||||
requests::HasPayload,
|
||||
types::{InlineKeyboardMarkup, MessageId, ParseMode},
|
||||
types::{InlineKeyboardMarkup, MaybeInaccessibleMessage, MessageId, ParseMode},
|
||||
};
|
||||
use tokio::{join, sync::Mutex};
|
||||
|
||||
@ -102,3 +102,18 @@ impl<T> Handler<T> {
|
||||
Arc::new(Mutex::new(handler))
|
||||
}
|
||||
}
|
||||
|
||||
pub trait CallbackMessageIdExt {
|
||||
fn get_ids(&self) -> MessageIds;
|
||||
}
|
||||
|
||||
impl CallbackMessageIdExt for CallbackQuery {
|
||||
fn get_ids(&self) -> MessageIds {
|
||||
match self.message.as_ref().unwrap() {
|
||||
MaybeInaccessibleMessage::Regular(m) => m.into(),
|
||||
MaybeInaccessibleMessage::Inaccessible(_) => {
|
||||
panic!()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user