diff --git a/delta/groups.ts b/delta/groups.ts
deleted file mode 100644
index 396a2b6..0000000
--- a/delta/groups.ts
+++ /dev/null
@@ -1,99 +0,0 @@
-import { Composer, Context, InlineKeyboard } from "../deps.ts";
-import communities from "../communities.json" assert { type: "json" };
-import pager from "../utils/pager.ts";
-import { reply } from "../utils/sender.ts";
-
-const composer = new Composer();
-const ctxMenuText =
- "Telegramdagi Rust Hamjamiyatlari yoki Guruhlari:\nAgar o'zingizni guruhingizni qo'shmoqchi bo'lsangiz, bizni community.json ni yangilang!";
-
-composer.command("group", async (ctx: Context): Promise => {
- const keyboard = new InlineKeyboard();
-
- for (const community of pager(1)) {
- keyboard.text(
- community.name,
- `detail_${1}_${community.telegram.replace("@", "")}`,
- ).row();
- }
-
- if (pager(2).length > 0) {
- keyboard.text(`Keyingi ➡️`, `group_2`);
- }
-
- await reply(ctx, ctxMenuText, keyboard, {
- disable_web_page_preview: true,
- });
-});
-
-composer.callbackQuery(/^group_(\d+)$/, async (ctx: Context) => {
- const page = Number(ctx.match![1]);
- const keyboard = new InlineKeyboard();
-
- for (const community of pager(page)) {
- keyboard.text(
- community.name,
- `detail_${page}_${community.telegram.replace("@", "")}`,
- ).row();
- }
-
- if (pager(page - 1).length > 0) {
- keyboard.text(`⬅️ Oldingi`, `group_${page - 1}`);
- }
-
- if (pager(page + 1).length > 0) {
- keyboard.text(`Keyingi ➡️`, `group_${page + 1}`);
- }
-
- await ctx.editMessageText(ctxMenuText, {
- parse_mode: "HTML",
- reply_markup: keyboard,
- disable_web_page_preview: true,
- });
-});
-
-composer.callbackQuery(/^detail_(\d+)_(.*)$/, async (ctx: Context) => {
- const keyboard = new InlineKeyboard();
- const page = ctx.match![1];
- const result = communities.filter((com) =>
- com.telegram.replace("@", "") === ctx.match![2]
- );
-
- if (result.length) {
- const data = result[0];
-
- if (data.telegram) {
- keyboard.url(
- `Telegram`,
- `https://t.me/${data.telegram.replace("@", "")}`,
- );
- }
-
- if (data.link) {
- keyboard.url(`Web`, data.link);
- }
-
- keyboard.row().text(`🔙 Orqaga`, `group_${page}`);
-
- await ctx.editMessageText(
- `${data.name}` +
- `\n` +
- `\n` +
- `${data.about}` +
- `\n` +
- `\n` +
- `Use the following buttons to get to the links:`,
- {
- parse_mode: "HTML",
- reply_markup: keyboard,
- },
- );
- } else {
- await ctx.editMessageText(`Ushbu guruh mavjud emas!`, {
- parse_mode: "HTML",
- reply_markup: new InlineKeyboard().text(`🔙 Orqaga`, `group_${page}`),
- });
- }
-});
-
-export default composer;
diff --git a/delta/mod.ts b/delta/mod.ts
index a15b3b3..bc91709 100644
--- a/delta/mod.ts
+++ b/delta/mod.ts
@@ -2,7 +2,6 @@ import which from "./which.ts";
import { Bot } from "../deps.ts";
import channel from "./channel.ts";
import trigger from "./trigger.ts";
-import groups from "./groups.ts";
import useful from "./useful.ts";
import latest from "./latest.ts";
import version from "./version.ts";
@@ -10,7 +9,6 @@ import version from "./version.ts";
export default async (bot: Bot) => {
await bot
.use(which)
- .use(groups)
.use(useful)
.use(latest)
.use(version)
diff --git a/src/functions/groups.rs b/src/functions/groups.rs
index 1ecc0f9..316d0d6 100644
--- a/src/functions/groups.rs
+++ b/src/functions/groups.rs
@@ -1,4 +1,4 @@
-use crate::utils::{group_manager::Groups, keyboard_manager::Keyboard};
+use crate::utils::{group_manager::{Groups, Group}, keyboard_manager::Keyboard};
use teloxide::{
payloads::SendMessageSetters,
prelude::*,
@@ -12,26 +12,39 @@ pub async fn command(bot: &Bot, msg: &Message) -> ResponseResult<()> {
bot.send_message(msg.chat.id, TEXT)
.parse_mode(ParseMode::Html)
- .reply_markup(keyboard(&groups, 1))
+ .reply_markup(keyboard_list(&groups, 1))
.await?;
Ok(())
}
-pub async fn callback(bot: &Bot, q: &CallbackQuery, args: &Vec<&str>) -> ResponseResult<()> {
+pub async fn callback_list(bot: &Bot, q: &CallbackQuery, args: &Vec<&str>) -> ResponseResult<()> {
let groups: Groups = Groups::new();
-
- // Parse page
- let page: i32 = match args[1].parse() {
- Ok(page) => page,
- Err(_) => 1,
- };
-
- if args.is_empty() {
+
+ if !args.is_empty() {
if let Some(Message { id, chat, .. }) = q.message.clone() {
bot.edit_message_text(chat.id, id, TEXT)
.parse_mode(ParseMode::Html)
- .reply_markup(keyboard(&groups, page))
+ .reply_markup(keyboard_list(&groups, args[0].parse().unwrap_or(1)))
+ .await?;
+ } else if let Some(id) = q.inline_message_id.clone() {
+ bot.edit_message_text_inline(id, "Oopsie, something went wrong...")
+ .await?;
+ }
+ }
+
+ Ok(())
+}
+
+pub async fn callback_detail(bot: &Bot, q: &CallbackQuery, args: &Vec<&str>) -> ResponseResult<()> {
+ let groups: Groups = Groups::new();
+ let find = groups.find_group(args[1..].join("_").to_string());
+
+ if !args.is_empty() {
+ if let Some(Message { id, chat, .. }) = q.message.clone() {
+ bot.edit_message_text(chat.id, id, view_detail(&find))
+ .parse_mode(ParseMode::Html)
+ .reply_markup(keyboard_detail( args[0].parse().unwrap_or(1), &find))
.await?;
} else if let Some(id) = q.inline_message_id.clone() {
bot.edit_message_text_inline(id, "Oopsie, something went wrong...")
@@ -42,7 +55,18 @@ pub async fn callback(bot: &Bot, q: &CallbackQuery, args: &Vec<&str>) -> Respons
Ok(())
}
-pub fn keyboard(groups: &Groups, page: i32) -> InlineKeyboardMarkup {
+pub fn view_detail(data: &Option) -> String {
+ match data {
+ Some(d) => {
+ format!("{}\n\n{}\n\nUse the following buttons to get to the links:", d.name, d.about)
+ },
+ None => {
+ "Ushbu guruh mavjud emas!".to_string()
+ }
+ }
+}
+
+pub fn keyboard_list(groups: &Groups, page: i32) -> InlineKeyboardMarkup {
let mut keyboard = Keyboard::new();
for group in groups.get_groups(page, 5) {
@@ -58,11 +82,31 @@ pub fn keyboard(groups: &Groups, page: i32) -> InlineKeyboardMarkup {
}
if !groups.get_groups(page + 1, 5).is_empty() {
- keyboard.text(&"Keyingi ➡️", &format!("group_{}", page + 1));
+ keyboard.text("Keyingi ➡️", &format!("group_{}", page + 1));
}
if page > 1 {
- keyboard.text(&"⬅️ Oldingi", &format!("group_{}", page - 1));
+ keyboard.text("⬅️ Oldingi", &format!("group_{}", page - 1));
+ }
+
+ keyboard.get()
+}
+
+pub fn keyboard_detail(page: i32, data: &Option) -> InlineKeyboardMarkup {
+ let mut keyboard = Keyboard::new();
+
+ if let Some(group) = data {
+ keyboard.url("Telegram", &format!("https://t.me/{}", group.telegram));
+
+ if group.link.is_some() {
+ keyboard.url("Web", &group.link.clone().unwrap());
+ }
+
+ keyboard.row();
+
+ keyboard.text("🔙 Orqaga", &format!("group_{}", page));
+ } else {
+ keyboard.text("🔙 Orqaga", &format!("group_{}", page));
}
keyboard.get()
diff --git a/src/functions/mod.rs b/src/functions/mod.rs
index 1406d06..627bc5c 100644
--- a/src/functions/mod.rs
+++ b/src/functions/mod.rs
@@ -31,19 +31,16 @@ pub async fn commands(
pub async fn callback(bot: Bot, q: CallbackQuery) -> Result<(), Box> {
let mut args: Vec<&str> = Vec::new();
- println!("Receiving callback: {:?}", q.data);
-
if let Some(data) = q.data.clone() {
- if data.contains("_") {
- args = data.split("_").collect();
+ if data.contains('_') {
+ args = data.split('_').collect();
} else {
args.push(&data);
}
- println!("Parsed arguments: {:?}", args);
-
- let _ = match args[0] {
- "group" => crate::functions::groups::callback(&bot, &q, &args).await,
+ let _ = match args.remove(0) {
+ "group" => crate::functions::groups::callback_list(&bot, &q, &args).await,
+ "detail" => crate::functions::groups::callback_detail(&bot, &q, &args).await,
_ => Ok(()),
};
}
diff --git a/src/utils/group_manager.rs b/src/utils/group_manager.rs
index 77cea14..11179dd 100644
--- a/src/utils/group_manager.rs
+++ b/src/utils/group_manager.rs
@@ -26,8 +26,6 @@ impl Groups {
let start = (page_number - 1) * page_size;
let end = page_number * page_size;
- println!("start: {}, end: {}", start, end);
-
if start < 0 || end < 0 {
return Vec::new();
}
@@ -42,4 +40,14 @@ impl Groups {
self.groups[start as usize..end as usize].to_vec()
}
+
+ pub fn find_group(&self, query: String) -> Option {
+ let search: Vec<&Group> = self.groups.iter().filter(|group| group.telegram[1..] == query).collect();
+
+ if search.is_empty() {
+ return None;
+ }
+
+ Some(search[0].clone())
+ }
}