* [PATCH v5 01/19] Add new table for atom URLs and broadcast chats in db.sql
2022-08-01 0:18 [PATCH v5 00/19] New feature to handle atom URLs and broadcast Muhammad Rizki
@ 2022-08-01 0:18 ` Muhammad Rizki
2022-08-01 0:19 ` [PATCH v5 02/19] Add a comment in .gitignore Muhammad Rizki
` (19 subsequent siblings)
20 siblings, 0 replies; 26+ messages in thread
From: Muhammad Rizki @ 2022-08-01 0:18 UTC (permalink / raw)
To: Ammar Faizi
Cc: Muhammad Rizki, GNU/Weeb Mailing List, Alviro Iskandar Setiawan
Just add new table for atom URLs and broadcast chats in db.sql to save
them in MySQL database.
Signed-off-by: Muhammad Rizki <[email protected]>
---
daemon/db.sql | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/daemon/db.sql b/daemon/db.sql
index 0e4841a..ac6ed0d 100644
--- a/daemon/db.sql
+++ b/daemon/db.sql
@@ -34,4 +34,29 @@ CREATE TABLE `tg_emails` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
+DROP TABLE IF EXISTS `atom_urls`;
+CREATE TABLE `atom_urls` (
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT,
+ `url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
+ `created_at` datetime NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `url` (`url`),
+ KEY `created_at` (`created_at`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
+
+
+DROP TABLE IF EXISTS `broadcast_chats`;
+CREATE TABLE `broadcast_chats` (
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT,
+ `chat_id` bigint NOT NULL,
+ `username` varchar(32),
+ `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
+ `type` varchar(32) NOT NULL,
+ `link` varchar(64),
+ `created_at` datetime NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `chat_id` (`chat_id`),
+ KEY `created_at` (`created_at`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
+
-- 2022-07-07 14:25:28
--
Muhammad Rizki
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 02/19] Add a comment in .gitignore
2022-08-01 0:18 [PATCH v5 00/19] New feature to handle atom URLs and broadcast Muhammad Rizki
2022-08-01 0:18 ` [PATCH v5 01/19] Add new table for atom URLs and broadcast chats in db.sql Muhammad Rizki
@ 2022-08-01 0:19 ` Muhammad Rizki
2022-08-01 0:19 ` [PATCH v5 03/19] Add ATOM_URLS and BROADCAST_CHAT methods Muhammad Rizki
` (18 subsequent siblings)
20 siblings, 0 replies; 26+ messages in thread
From: Muhammad Rizki @ 2022-08-01 0:19 UTC (permalink / raw)
To: Ammar Faizi
Cc: Muhammad Rizki, GNU/Weeb Mailing List, Alviro Iskandar Setiawan
Just add a comment for PATCH files in ../.gitignore
Signed-off-by: Muhammad Rizki <[email protected]>
---
.gitignore | 1 +
1 file changed, 1 insertion(+)
diff --git a/.gitignore b/.gitignore
index ca28962..eae515c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -136,4 +136,5 @@ data.json
# VSCode editor
.vscode/
+# PATCH files
*.patch
--
Muhammad Rizki
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 03/19] Add ATOM_URLS and BROADCAST_CHAT methods
2022-08-01 0:18 [PATCH v5 00/19] New feature to handle atom URLs and broadcast Muhammad Rizki
2022-08-01 0:18 ` [PATCH v5 01/19] Add new table for atom URLs and broadcast chats in db.sql Muhammad Rizki
2022-08-01 0:19 ` [PATCH v5 02/19] Add a comment in .gitignore Muhammad Rizki
@ 2022-08-01 0:19 ` Muhammad Rizki
2022-08-01 0:19 ` [PATCH v5 04/19] Fix MySQL InternalError: Unread result found Muhammad Rizki
` (17 subsequent siblings)
20 siblings, 0 replies; 26+ messages in thread
From: Muhammad Rizki @ 2022-08-01 0:19 UTC (permalink / raw)
To: Ammar Faizi
Cc: Muhammad Rizki, GNU/Weeb Mailing List, Alviro Iskandar Setiawan
I decided to add ATOM_URLS and BROADCAST_CHAT methods to get their
content in database which will be handle in scraper/bot.py
Signed-off-by: Muhammad Rizki <[email protected]>
---
daemon/scraper/bot.py | 17 ++++-------------
daemon/scraper/db.py | 21 +++++++++++++++++++++
2 files changed, 25 insertions(+), 13 deletions(-)
diff --git a/daemon/scraper/bot.py b/daemon/scraper/bot.py
index bc9d575..c475e34 100644
--- a/daemon/scraper/bot.py
+++ b/daemon/scraper/bot.py
@@ -21,16 +21,6 @@ class BotMutexes():
class Bot():
- ATOM_URLS = [
- "https://lore.kernel.org/io-uring/new.atom",
- "https://lore.kernel.org/linux-sgx/new.atom",
- ]
-
- TG_CHAT_IDS = [
- "kiizuah"
- ]
-
-
def __init__(self, client: DaemonClient, sched: AsyncIOScheduler,
scraper: Scraper, mutexes: BotMutexes, conn):
self.client = client
@@ -55,7 +45,7 @@ class Bot():
async def __run(self):
print("[__run]: Running...")
- for url in self.ATOM_URLS:
+ for url in self.db.get_atom_urls():
try:
await self.__handle_atom_url(url)
except:
@@ -80,10 +70,11 @@ class Bot():
async def __handle_mail(self, url, mail):
- for tg_chat_id in self.TG_CHAT_IDS:
+ chats = self.db.get_broadcast_chats()
+ for chat in chats:
async with self.mutexes.send_to_tg:
should_wait = await self.__send_to_tg(url, mail,
- tg_chat_id)
+ chat[1])
if should_wait:
await asyncio.sleep(1)
diff --git a/daemon/scraper/db.py b/daemon/scraper/db.py
index a79f041..321661f 100644
--- a/daemon/scraper/db.py
+++ b/daemon/scraper/db.py
@@ -112,3 +112,24 @@ class Db():
return None
return res[0]
+
+
+ def get_atom_urls(self):
+ q = """
+ SELECT atom_urls.url
+ FROM atom_urls
+ """
+ self.cur.execute(q)
+ urls = self.cur.fetchall()
+
+ return [u[0] for u in urls]
+
+
+ def get_broadcast_chats(self):
+ q = """
+ SELECT *
+ FROM broadcast_chats
+ """
+ self.cur.execute(q)
+
+ return self.cur.fetchall()
--
Muhammad Rizki
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 04/19] Fix MySQL InternalError: Unread result found
2022-08-01 0:18 [PATCH v5 00/19] New feature to handle atom URLs and broadcast Muhammad Rizki
` (2 preceding siblings ...)
2022-08-01 0:19 ` [PATCH v5 03/19] Add ATOM_URLS and BROADCAST_CHAT methods Muhammad Rizki
@ 2022-08-01 0:19 ` Muhammad Rizki
2022-08-01 0:19 ` [PATCH v5 05/19] Create /add_atom command Muhammad Rizki
` (16 subsequent siblings)
20 siblings, 0 replies; 26+ messages in thread
From: Muhammad Rizki @ 2022-08-01 0:19 UTC (permalink / raw)
To: Ammar Faizi
Cc: Muhammad Rizki, GNU/Weeb Mailing List, Alviro Iskandar Setiawan
Use con.cursor(buffered=True) to make it avoid from
mysql.connector.errors.InternalError: Unread result found.
Signed-off-by: Muhammad Rizki <[email protected]>
---
daemon/scraper/db.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/daemon/scraper/db.py b/daemon/scraper/db.py
index 321661f..296559e 100644
--- a/daemon/scraper/db.py
+++ b/daemon/scraper/db.py
@@ -12,7 +12,7 @@ class Db():
def __init__(self, conn):
self.conn = conn
self.conn.autocommit = True
- self.cur = self.conn.cursor()
+ self.cur = self.conn.cursor(buffered=True)
def __del__(self):
--
Muhammad Rizki
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 05/19] Create /add_atom command
2022-08-01 0:18 [PATCH v5 00/19] New feature to handle atom URLs and broadcast Muhammad Rizki
` (3 preceding siblings ...)
2022-08-01 0:19 ` [PATCH v5 04/19] Fix MySQL InternalError: Unread result found Muhammad Rizki
@ 2022-08-01 0:19 ` Muhammad Rizki
2022-08-02 21:43 ` Ammar Faizi
2022-08-01 0:19 ` [PATCH v5 06/19] Add utility functions for /add_atom Muhammad Rizki
` (15 subsequent siblings)
20 siblings, 1 reply; 26+ messages in thread
From: Muhammad Rizki @ 2022-08-01 0:19 UTC (permalink / raw)
To: Ammar Faizi
Cc: Muhammad Rizki, GNU/Weeb Mailing List, Alviro Iskandar Setiawan
Create /add_atom command for adding the atom url to the database
Signed-off-by: Muhammad Rizki <[email protected]>
---
daemon/packages/plugins/manage_atom.py | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
create mode 100644 daemon/packages/plugins/manage_atom.py
diff --git a/daemon/packages/plugins/manage_atom.py b/daemon/packages/plugins/manage_atom.py
new file mode 100644
index 0000000..eca3a60
--- /dev/null
+++ b/daemon/packages/plugins/manage_atom.py
@@ -0,0 +1,22 @@
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Copyright (C) 2022 Muhammad Rizki <[email protected]>
+#
+
+from pyrogram.types import Message
+from pyrogram import filters
+from packages import DaemonClient
+
[email protected]_message(
+ filters.command("add_atom") &
+ filters.chat(["kiizuah", "nekoha", -1001673279485])
+)
+async def add_atom_url(c: DaemonClient, m: Message):
+ pass
+ # text = utils.remove_command(m.text)
+ # if not utils.is_atom_url(text):
+ # return
+
+ # ###
+ # ### TODO: Muhammad Rizki: Add atom url into the database
+ # ###
--
Muhammad Rizki
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 06/19] Add utility functions for /add_atom
2022-08-01 0:18 [PATCH v5 00/19] New feature to handle atom URLs and broadcast Muhammad Rizki
` (4 preceding siblings ...)
2022-08-01 0:19 ` [PATCH v5 05/19] Create /add_atom command Muhammad Rizki
@ 2022-08-01 0:19 ` Muhammad Rizki
2022-08-01 0:19 ` [PATCH v5 07/19] Refactor database methods Muhammad Rizki
` (14 subsequent siblings)
20 siblings, 0 replies; 26+ messages in thread
From: Muhammad Rizki @ 2022-08-01 0:19 UTC (permalink / raw)
To: Ammar Faizi
Cc: Muhammad Rizki, GNU/Weeb Mailing List, Alviro Iskandar Setiawan
Add some utility functions for /add_atom command in the scraper/utils.py
and call it in packages/plugins/add_atom.py
Signed-off-by: Muhammad Rizki <[email protected]>
---
daemon/packages/plugins/manage_atom.py | 20 ++++++++++----------
daemon/scraper/utils.py | 15 +++++++++++++++
2 files changed, 25 insertions(+), 10 deletions(-)
diff --git a/daemon/packages/plugins/manage_atom.py b/daemon/packages/plugins/manage_atom.py
index eca3a60..a10318f 100644
--- a/daemon/packages/plugins/manage_atom.py
+++ b/daemon/packages/plugins/manage_atom.py
@@ -6,17 +6,17 @@
from pyrogram.types import Message
from pyrogram import filters
from packages import DaemonClient
+from scraper import utils
@DaemonClient.on_message(
- filters.command("add_atom") &
- filters.chat(["kiizuah", "nekoha", -1001673279485])
+ filters.command("add_atom") &
+ filters.chat(["kiizuah", "nekoha", -1001673279485])
)
async def add_atom_url(c: DaemonClient, m: Message):
- pass
- # text = utils.remove_command(m.text)
- # if not utils.is_atom_url(text):
- # return
-
- # ###
- # ### TODO: Muhammad Rizki: Add atom url into the database
- # ###
+ text = utils.remove_command(m.text)
+ if not utils.is_atom_url(text):
+ return
+
+ ###
+ ### TODO: Muhammad Rizki: Add atom url into the database
+ ###
diff --git a/daemon/scraper/utils.py b/daemon/scraper/utils.py
index 30efb7b..f7de5ba 100644
--- a/daemon/scraper/utils.py
+++ b/daemon/scraper/utils.py
@@ -12,6 +12,7 @@ import uuid
import os
import re
import shutil
+import httpx
def get_email_msg_id(mail):
@@ -231,3 +232,17 @@ def extract_email_msg_id(msg_id):
return None
return ret.group(1)
+
+async def is_atom_url(text: str):
+ try:
+ async with httpx.AsyncClient() as ses:
+ res = await ses.get(text)
+ mime = res.headers.get("Content-Type")
+
+ return mime == "application/atom+xml"
+ except: return False
+
+def remove_command(text: str):
+ txt = text.split(" ")
+ txt = text.replace(txt[0] + " ","")
+ return txt
--
Muhammad Rizki
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 07/19] Refactor database methods
2022-08-01 0:18 [PATCH v5 00/19] New feature to handle atom URLs and broadcast Muhammad Rizki
` (5 preceding siblings ...)
2022-08-01 0:19 ` [PATCH v5 06/19] Add utility functions for /add_atom Muhammad Rizki
@ 2022-08-01 0:19 ` Muhammad Rizki
2022-08-01 0:19 ` [PATCH v5 08/19] Add insert_atom() in scraper/db.py Muhammad Rizki
` (13 subsequent siblings)
20 siblings, 0 replies; 26+ messages in thread
From: Muhammad Rizki @ 2022-08-01 0:19 UTC (permalink / raw)
To: Ammar Faizi
Cc: Muhammad Rizki, GNU/Weeb Mailing List, Alviro Iskandar Setiawan
I decided to refactor the database methods to make it able to access
with DaemonClient, so in that client I just to call one of the database
function just like:
async def add_atom(c: DaemonClient, m: Message):
c.db.insert_atom("atom_url_here")
The c here is the DaemonClient parameter in the add_atom MessageHandler
function
Signed-off-by: Muhammad Rizki <[email protected]>
---
daemon/packages/client.py | 4 +++-
daemon/run.py | 16 ++++++++--------
daemon/scraper/bot.py | 5 ++---
3 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/daemon/packages/client.py b/daemon/packages/client.py
index d16fe46..282daf6 100644
--- a/daemon/packages/client.py
+++ b/daemon/packages/client.py
@@ -9,14 +9,16 @@ from pyrogram.types import Message, InlineKeyboardMarkup, InlineKeyboardButton
from typing import Union
from email.message import Message
from scraper import utils
+from scraper.db import Db
from .decorator import handle_flood
class DaemonClient(Client):
def __init__(self, name: str, api_id: int,
- api_hash: str, **kwargs):
+ api_hash: str, conn, **kwargs):
super().__init__(name, api_id,
api_hash, **kwargs)
+ self.db = Db(conn)
@handle_flood
diff --git a/daemon/run.py b/daemon/run.py
index 1151ccd..5360395 100644
--- a/daemon/run.py
+++ b/daemon/run.py
@@ -22,9 +22,15 @@ def main():
api_id=int(os.getenv("API_ID")),
api_hash=os.getenv("API_HASH"),
bot_token=os.getenv("BOT_TOKEN"),
+ conn=connector.connect(
+ host=os.getenv("DB_HOST"),
+ user=os.getenv("DB_USER"),
+ password=os.getenv("DB_PASS"),
+ database=os.getenv("DB_NAME")
+ ),
plugins=dict(
root="packages.plugins"
- )
+ ),
)
sched = AsyncIOScheduler(
@@ -38,13 +44,7 @@ def main():
client=client,
sched=sched,
scraper=Scraper(),
- mutexes=BotMutexes(),
- conn=connector.connect(
- host=os.getenv("DB_HOST"),
- user=os.getenv("DB_USER"),
- password=os.getenv("DB_PASS"),
- database=os.getenv("DB_NAME")
- )
+ mutexes=BotMutexes()
)
sched.start()
bot.run()
diff --git a/daemon/scraper/bot.py b/daemon/scraper/bot.py
index c475e34..7adfb12 100644
--- a/daemon/scraper/bot.py
+++ b/daemon/scraper/bot.py
@@ -8,7 +8,6 @@ from apscheduler.schedulers.asyncio import AsyncIOScheduler
from packages import DaemonClient
from scraper import Scraper
from . import utils
-from .db import Db
import asyncio
import shutil
import re
@@ -22,12 +21,12 @@ class BotMutexes():
class Bot():
def __init__(self, client: DaemonClient, sched: AsyncIOScheduler,
- scraper: Scraper, mutexes: BotMutexes, conn):
+ scraper: Scraper, mutexes: BotMutexes):
self.client = client
self.sched = sched
self.scraper = scraper
self.mutexes = mutexes
- self.db = Db(conn)
+ self.db = client.db
self.isRunnerFixed = False
--
Muhammad Rizki
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 08/19] Add insert_atom() in scraper/db.py
2022-08-01 0:18 [PATCH v5 00/19] New feature to handle atom URLs and broadcast Muhammad Rizki
` (6 preceding siblings ...)
2022-08-01 0:19 ` [PATCH v5 07/19] Refactor database methods Muhammad Rizki
@ 2022-08-01 0:19 ` Muhammad Rizki
2022-08-01 0:19 ` [PATCH v5 09/19] Rename admin.py to debugger.py Muhammad Rizki
` (12 subsequent siblings)
20 siblings, 0 replies; 26+ messages in thread
From: Muhammad Rizki @ 2022-08-01 0:19 UTC (permalink / raw)
To: Ammar Faizi
Cc: Muhammad Rizki, GNU/Weeb Mailing List, Alviro Iskandar Setiawan
Add insert_atom() in scraper/db.py and call it in
packages/plugins/add_atom.py to insert atom url into the database
Signed-off-by: Muhammad Rizki <[email protected]>
---
daemon/packages/plugins/manage_atom.py | 18 +++++++++++++-----
daemon/scraper/db.py | 16 ++++++++++++++++
2 files changed, 29 insertions(+), 5 deletions(-)
diff --git a/daemon/packages/plugins/manage_atom.py b/daemon/packages/plugins/manage_atom.py
index a10318f..934aba9 100644
--- a/daemon/packages/plugins/manage_atom.py
+++ b/daemon/packages/plugins/manage_atom.py
@@ -13,10 +13,18 @@ from scraper import utils
filters.chat(["kiizuah", "nekoha", -1001673279485])
)
async def add_atom_url(c: DaemonClient, m: Message):
+ if len(m.command) <= 1:
+ tutor = "Please specify the URL\n"
+ tutor += "Example: `/add_atom https://lore.kernel.org/linux-sgx/new.atom`"
+ return await m.reply(tutor)
+
text = utils.remove_command(m.text)
- if not utils.is_atom_url(text):
- return
+ is_atom = await utils.is_atom_url(text)
+ if not is_atom:
+ return await m.reply("Invalid Atom URL")
+
+ inserted = c.db.insert_atom(text)
+ if inserted is None:
+ return await m.reply(f"This URL already listened for new email.")
- ###
- ### TODO: Muhammad Rizki: Add atom url into the database
- ###
+ await m.reply(f"Success add **{text}** for listening new email")
diff --git a/daemon/scraper/db.py b/daemon/scraper/db.py
index 296559e..30ed9a7 100644
--- a/daemon/scraper/db.py
+++ b/daemon/scraper/db.py
@@ -114,6 +114,22 @@ class Db():
return res[0]
+ def insert_atom(self, atom: str):
+ try:
+ return self.__save_atom(atom)
+ except mysql.connector.errors.IntegrityError:
+ #
+ # Duplicate data, skip!
+ #
+ return None
+
+
+ def __save_atom(self, atom: str):
+ q = "INSERT INTO atom_urls (url, created_at) VALUES (%s, %s)"
+ self.cur.execute(q, (atom, datetime.utcnow()))
+ return self.cur.lastrowid
+
+
def get_atom_urls(self):
q = """
SELECT atom_urls.url
--
Muhammad Rizki
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 09/19] Rename admin.py to debugger.py
2022-08-01 0:18 [PATCH v5 00/19] New feature to handle atom URLs and broadcast Muhammad Rizki
` (7 preceding siblings ...)
2022-08-01 0:19 ` [PATCH v5 08/19] Add insert_atom() in scraper/db.py Muhammad Rizki
@ 2022-08-01 0:19 ` Muhammad Rizki
2022-08-01 0:19 ` [PATCH v5 10/19] Add delete_atom() function in scraper/db.py Muhammad Rizki
` (11 subsequent siblings)
20 siblings, 0 replies; 26+ messages in thread
From: Muhammad Rizki @ 2022-08-01 0:19 UTC (permalink / raw)
To: Ammar Faizi
Cc: Muhammad Rizki, GNU/Weeb Mailing List, Alviro Iskandar Setiawan
I want to create a plugin file that the name is related to admin, so I
decided to rename packages/plugins/admin.py to
packages/plugins/debugger.py
Signed-off-by: Muhammad Rizki <[email protected]>
---
daemon/packages/plugins/{admin.py => debugger.py} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename daemon/packages/plugins/{admin.py => debugger.py} (100%)
diff --git a/daemon/packages/plugins/admin.py b/daemon/packages/plugins/debugger.py
similarity index 100%
rename from daemon/packages/plugins/admin.py
rename to daemon/packages/plugins/debugger.py
--
Muhammad Rizki
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH v5 10/19] Add delete_atom() function in scraper/db.py
2022-08-01 0:18 [PATCH v5 00/19] New feature to handle atom URLs and broadcast Muhammad Rizki
` (8 preceding siblings ...)
2022-08-01 0:19 ` [PATCH v5 09/19] Rename admin.py to debugger.py Muhammad Rizki
@ 2022-08-01 0:19 ` Muhammad Rizki
2022-08-02 21:45 ` Ammar Faizi
2022-08-01 0:19 ` [PATCH v5 11/19] Add utility function buton_numbers() Muhammad Rizki
` (10 subsequent siblings)
20 siblings, 1 reply; 26+ messages in thread
From: Muhammad Rizki @ 2022-08-01 0:19 UTC (permalink / raw)
To: Ammar Faizi
Cc: Muhammad Rizki, GNU/Weeb Mailing List, Alviro Iskandar Setiawan
Add delete_atom() function to remove atom URL in database
Signed-off-by: Muhammad Rizki <[email protected]>
---
daemon/packages/plugins/manage_atom.py | 19 ++++++++++++++++++-
daemon/scraper/db.py | 12 ++++++++++++
2 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/daemon/packages/plugins/manage_atom.py b/daemon/packages/plugins/manage_atom.py
index 934aba9..0d2166a 100644
--- a/daemon/packages/plugins/manage_atom.py
+++ b/daemon/packages/plugins/manage_atom.py
@@ -3,7 +3,7 @@
# Copyright (C) 2022 Muhammad Rizki <[email protected]>
#
-from pyrogram.types import Message
+from pyrogram.types import Message, InlineKeyboardMarkup, InlineKeyboardButton
from pyrogram import filters
from packages import DaemonClient
from scraper import utils
@@ -28,3 +28,20 @@ async def add_atom_url(c: DaemonClient, m: Message):
return await m.reply(f"This URL already listened for new email.")
await m.reply(f"Success add **{text}** for listening new email")
+
+
[email protected]_message(
+ filters.command("del_atom") &
+ filters.chat(["kiizuah", "nekoha", -1001673279485])
+)
+async def del_atom_url(c: DaemonClient, m: Message):
+ atoms = c.db.get_atom_urls()
+ if len(atoms) == 0:
+ return await m.reply("Currently empty.")
+
+ text = "List of atom URL that currently listened:\n"
+ for u,i in zip(atoms, range(1, len(atoms)+1)):
+ text += f"{i}. {u}\n"
+
+ text += "\nChoose one of the URL above to delete by index below."
+ await m.reply(text)
diff --git a/daemon/scraper/db.py b/daemon/scraper/db.py
index 30ed9a7..24fc2c6 100644
--- a/daemon/scraper/db.py
+++ b/daemon/scraper/db.py
@@ -130,6 +130,18 @@ class Db():
return self.cur.lastrowid
+ def delete_atom(self, atom: str):
+ q = """
+ DELETE FROM atom_urls
+ WHERE url = %(atom)s
+ """
+ try:
+ self.cur.execute(q, {"atom": atom})
+ return True
+ except:
+ return False
+
+
def get_atom_urls(self):
q = """
SELECT atom_urls.url
--
Muhammad Rizki
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 11/19] Add utility function buton_numbers()
2022-08-01 0:18 [PATCH v5 00/19] New feature to handle atom URLs and broadcast Muhammad Rizki
` (9 preceding siblings ...)
2022-08-01 0:19 ` [PATCH v5 10/19] Add delete_atom() function in scraper/db.py Muhammad Rizki
@ 2022-08-01 0:19 ` Muhammad Rizki
2022-08-01 0:19 ` [PATCH v5 12/19] Move bot commands related files to packages/plugins/commands/ Muhammad Rizki
` (9 subsequent siblings)
20 siblings, 0 replies; 26+ messages in thread
From: Muhammad Rizki @ 2022-08-01 0:19 UTC (permalink / raw)
To: Ammar Faizi
Cc: Muhammad Rizki, GNU/Weeb Mailing List, Alviro Iskandar Setiawan
Add utility function buton_numbers() for easily create a number of
inline buttons to manage delete atom urls.
Signed-off-by: Muhammad Rizki <[email protected]>
---
daemon/packages/plugins/manage_atom.py | 5 ++++-
daemon/scraper/utils.py | 17 +++++++++++++++++
2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/daemon/packages/plugins/manage_atom.py b/daemon/packages/plugins/manage_atom.py
index 0d2166a..0b916de 100644
--- a/daemon/packages/plugins/manage_atom.py
+++ b/daemon/packages/plugins/manage_atom.py
@@ -44,4 +44,7 @@ async def del_atom_url(c: DaemonClient, m: Message):
text += f"{i}. {u}\n"
text += "\nChoose one of the URL above to delete by index below."
- await m.reply(text)
+ await m.reply(text, reply_markup=utils.button_numbers(
+ data=atoms,
+ callback_prefix="del_atom"
+ ))
diff --git a/daemon/scraper/utils.py b/daemon/scraper/utils.py
index f7de5ba..d894c32 100644
--- a/daemon/scraper/utils.py
+++ b/daemon/scraper/utils.py
@@ -4,6 +4,7 @@
# Copyright (C) 2022 Ammar Faizi <[email protected]>
#
+from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton
from email.message import Message
from typing import Dict
from slugify import slugify
@@ -246,3 +247,19 @@ def remove_command(text: str):
txt = text.split(" ")
txt = text.replace(txt[0] + " ","")
return txt
+
+
+def button_numbers(data: list, callback_prefix: str, limit: int = 8):
+ if limit > 8:
+ raise ValueError("Limit value cannot more than 8.")
+
+ lst = []
+ for i in range(1, len(data)+1):
+ button = InlineKeyboardButton(
+ str(i),
+ callback_data=f"{callback_prefix} {i}"
+ )
+ lst.append(button)
+
+ buttons = [lst[i:i + limit ] for i in range(0, len(lst), limit)]
+ return InlineKeyboardMarkup(buttons)
--
Muhammad Rizki
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 12/19] Move bot commands related files to packages/plugins/commands/
2022-08-01 0:18 [PATCH v5 00/19] New feature to handle atom URLs and broadcast Muhammad Rizki
` (10 preceding siblings ...)
2022-08-01 0:19 ` [PATCH v5 11/19] Add utility function buton_numbers() Muhammad Rizki
@ 2022-08-01 0:19 ` Muhammad Rizki
2022-08-01 0:19 ` [PATCH v5 13/19] Add del_atom callback query Muhammad Rizki
` (8 subsequent siblings)
20 siblings, 0 replies; 26+ messages in thread
From: Muhammad Rizki @ 2022-08-01 0:19 UTC (permalink / raw)
To: Ammar Faizi
Cc: Muhammad Rizki, GNU/Weeb Mailing List, Alviro Iskandar Setiawan
So, I want to split files between bot commands and bot callback queries
with their specific directory, it much cleaner than before.
Signed-off-by: Muhammad Rizki <[email protected]>
---
daemon/packages/plugins/{ => commands}/debugger.py | 0
daemon/packages/plugins/{ => commands}/manage_atom.py | 0
daemon/packages/plugins/{ => commands}/scrape.py | 0
3 files changed, 0 insertions(+), 0 deletions(-)
rename daemon/packages/plugins/{ => commands}/debugger.py (100%)
rename daemon/packages/plugins/{ => commands}/manage_atom.py (100%)
rename daemon/packages/plugins/{ => commands}/scrape.py (100%)
diff --git a/daemon/packages/plugins/debugger.py b/daemon/packages/plugins/commands/debugger.py
similarity index 100%
rename from daemon/packages/plugins/debugger.py
rename to daemon/packages/plugins/commands/debugger.py
diff --git a/daemon/packages/plugins/manage_atom.py b/daemon/packages/plugins/commands/manage_atom.py
similarity index 100%
rename from daemon/packages/plugins/manage_atom.py
rename to daemon/packages/plugins/commands/manage_atom.py
diff --git a/daemon/packages/plugins/scrape.py b/daemon/packages/plugins/commands/scrape.py
similarity index 100%
rename from daemon/packages/plugins/scrape.py
rename to daemon/packages/plugins/commands/scrape.py
--
Muhammad Rizki
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH v5 13/19] Add del_atom callback query
2022-08-01 0:18 [PATCH v5 00/19] New feature to handle atom URLs and broadcast Muhammad Rizki
` (11 preceding siblings ...)
2022-08-01 0:19 ` [PATCH v5 12/19] Move bot commands related files to packages/plugins/commands/ Muhammad Rizki
@ 2022-08-01 0:19 ` Muhammad Rizki
2022-08-01 0:19 ` [PATCH v5 14/19] Add insert_broadcast() in scraper/db.py Muhammad Rizki
` (7 subsequent siblings)
20 siblings, 0 replies; 26+ messages in thread
From: Muhammad Rizki @ 2022-08-01 0:19 UTC (permalink / raw)
To: Ammar Faizi
Cc: Muhammad Rizki, GNU/Weeb Mailing List, Alviro Iskandar Setiawan
I want to easily remove atom URL by index remotely using bot message
button, easily just press the button number in /del_atom bot command.
Signed-off-by: Muhammad Rizki <[email protected]>
---
daemon/packages/plugins/callbacks/del_atom.py | 31 +++++++++++++++++++
1 file changed, 31 insertions(+)
create mode 100644 daemon/packages/plugins/callbacks/del_atom.py
diff --git a/daemon/packages/plugins/callbacks/del_atom.py b/daemon/packages/plugins/callbacks/del_atom.py
new file mode 100644
index 0000000..0595e67
--- /dev/null
+++ b/daemon/packages/plugins/callbacks/del_atom.py
@@ -0,0 +1,31 @@
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Copyright (C) 2022 Muhammad Rizki <[email protected]>
+#
+
+from packages import DaemonClient
+from scraper import utils
+from pyrogram.types import CallbackQuery
+
+
[email protected]_callback_query(group=1)
+async def on_del_atom(c: DaemonClient, cb: CallbackQuery):
+ if not "del_atom" in cb.data:
+ return
+
+ atoms = c.db.get_atom_urls()
+ if len(atoms) == 0:
+ return await cb.answer("Currently empty.")
+
+ index = int(utils.remove_command(cb.data))
+ atom = atoms[index - 1]
+ c.db.delete_atom(atom)
+
+ await cb.answer(
+ f"Success delete {atom} from listening new email",
+ show_alert=True
+ )
+
+ await cb.message.delete()
+ if cb.message.reply_to_message:
+ await cb.message.reply_to_message.delete()
--
Muhammad Rizki
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 14/19] Add insert_broadcast() in scraper/db.py
2022-08-01 0:18 [PATCH v5 00/19] New feature to handle atom URLs and broadcast Muhammad Rizki
` (12 preceding siblings ...)
2022-08-01 0:19 ` [PATCH v5 13/19] Add del_atom callback query Muhammad Rizki
@ 2022-08-01 0:19 ` Muhammad Rizki
2022-08-01 0:19 ` [PATCH v5 15/19] Add delete_broadcast() " Muhammad Rizki
` (6 subsequent siblings)
20 siblings, 0 replies; 26+ messages in thread
From: Muhammad Rizki @ 2022-08-01 0:19 UTC (permalink / raw)
To: Ammar Faizi
Cc: Muhammad Rizki, GNU/Weeb Mailing List, Alviro Iskandar Setiawan
Add insert_broadcast() in scraper/db.py to insert the chat room for
receiving new email into the database.
Signed-off-by: Muhammad Rizki <[email protected]>
---
daemon/scraper/db.py | 46 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)
diff --git a/daemon/scraper/db.py b/daemon/scraper/db.py
index 24fc2c6..a0f8d15 100644
--- a/daemon/scraper/db.py
+++ b/daemon/scraper/db.py
@@ -5,6 +5,7 @@
#
from datetime import datetime
+from typing import Union
import mysql
@@ -153,6 +154,51 @@ class Db():
return [u[0] for u in urls]
+ def insert_broadcast(
+ self,
+ chat_id: int,
+ name: str,
+ type: str,
+ created_at: "datetime",
+ username: str = None,
+ link: str = None,
+ ):
+ try:
+ return self.__save_broadcast(
+ chat_id=chat_id,
+ name=name,
+ type=type,
+ created_at=created_at,
+ username=username,
+ link=link
+ )
+ except mysql.connector.errors.IntegrityError:
+ #
+ # Duplicate data, skip!
+ #
+ return None
+
+
+ def __save_broadcast(
+ self,
+ chat_id: int,
+ name: str,
+ type: str,
+ created_at: "datetime",
+ username: str = None,
+ link: str = None,
+ ):
+ q = """
+ INSERT INTO broadcast_chats
+ (chat_id, username, name, type, link, created_at)
+ VALUES
+ (%s, %s, %s, %s, %s, %s)
+ """
+ values = (chat_id, username, name, type, link, created_at)
+ self.cur.execute(q, values)
+ return self.cur.lastrowid
+
+
def get_broadcast_chats(self):
q = """
SELECT *
--
Muhammad Rizki
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 15/19] Add delete_broadcast() in scraper/db.py
2022-08-01 0:18 [PATCH v5 00/19] New feature to handle atom URLs and broadcast Muhammad Rizki
` (13 preceding siblings ...)
2022-08-01 0:19 ` [PATCH v5 14/19] Add insert_broadcast() in scraper/db.py Muhammad Rizki
@ 2022-08-01 0:19 ` Muhammad Rizki
2022-08-01 0:19 ` [PATCH v5 16/19] Create /add_bc bot command Muhammad Rizki
` (5 subsequent siblings)
20 siblings, 0 replies; 26+ messages in thread
From: Muhammad Rizki @ 2022-08-01 0:19 UTC (permalink / raw)
To: Ammar Faizi
Cc: Muhammad Rizki, GNU/Weeb Mailing List, Alviro Iskandar Setiawan
Add delete_broadcast() for delete a chat in the database from receiving
email messages.
Signed-off-by: Muhammad Rizki <[email protected]>
---
daemon/scraper/db.py | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/daemon/scraper/db.py b/daemon/scraper/db.py
index a0f8d15..15b0f99 100644
--- a/daemon/scraper/db.py
+++ b/daemon/scraper/db.py
@@ -199,6 +199,15 @@ class Db():
return self.cur.lastrowid
+ def delete_broadcast(self, chat_id: int):
+ q = """
+ DELETE FROM broadcast_chats
+ WHERE chat_id = %(chat_id)s
+ """
+ self.cur.execute(q, {"chat_id": chat_id})
+ return self.cur.rowcount > 0
+
+
def get_broadcast_chats(self):
q = """
SELECT *
--
Muhammad Rizki
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 16/19] Create /add_bc bot command
2022-08-01 0:18 [PATCH v5 00/19] New feature to handle atom URLs and broadcast Muhammad Rizki
` (14 preceding siblings ...)
2022-08-01 0:19 ` [PATCH v5 15/19] Add delete_broadcast() " Muhammad Rizki
@ 2022-08-01 0:19 ` Muhammad Rizki
2022-08-01 0:19 ` [PATCH v5 17/19] Add create_chat_link() function Muhammad Rizki
` (4 subsequent siblings)
20 siblings, 0 replies; 26+ messages in thread
From: Muhammad Rizki @ 2022-08-01 0:19 UTC (permalink / raw)
To: Ammar Faizi
Cc: Muhammad Rizki, GNU/Weeb Mailing List, Alviro Iskandar Setiawan
Create /add_bc bot command for adding the current chat into the database
Signed-off-by: Muhammad Rizki <[email protected]>
---
.../plugins/commands/manage_broadcast.py | 35 +++++++++++++++++++
1 file changed, 35 insertions(+)
create mode 100644 daemon/packages/plugins/commands/manage_broadcast.py
diff --git a/daemon/packages/plugins/commands/manage_broadcast.py b/daemon/packages/plugins/commands/manage_broadcast.py
new file mode 100644
index 0000000..8397508
--- /dev/null
+++ b/daemon/packages/plugins/commands/manage_broadcast.py
@@ -0,0 +1,35 @@
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Copyright (C) 2022 Muhammad Rizki <[email protected]>
+#
+
+from pyrogram.types import Message
+from pyrogram import filters, enums
+from packages import DaemonClient
+
+
[email protected]_message(
+ filters.command("add_bc") &
+ (filters.private | filters.group)
+)
+async def add_broadcast(c: DaemonClient, m: Message):
+ if m.chat.type == enums.ChatType.PRIVATE:
+ chat_name = m.chat.first_name
+ else:
+ chat_name = m.chat.title
+
+ inserted = c.db.insert_broadcast(
+ chat_id=m.chat.id,
+ name=chat_name,
+ type=str(m.chat.type),
+ created_at=m.date,
+ username=m.chat.username,
+ link=m.chat.invite_link
+ )
+
+ if inserted is None:
+ msg = f"This chat already added for receiving email messages"
+ else:
+ msg = f"Success add this chat for receiving email messages"
+
+ await m.reply(msg)
--
Muhammad Rizki
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 17/19] Add create_chat_link() function
2022-08-01 0:18 [PATCH v5 00/19] New feature to handle atom URLs and broadcast Muhammad Rizki
` (15 preceding siblings ...)
2022-08-01 0:19 ` [PATCH v5 16/19] Create /add_bc bot command Muhammad Rizki
@ 2022-08-01 0:19 ` Muhammad Rizki
2022-08-01 0:19 ` [PATCH v5 18/19] Add /del_bc bot command Muhammad Rizki
` (3 subsequent siblings)
20 siblings, 0 replies; 26+ messages in thread
From: Muhammad Rizki @ 2022-08-01 0:19 UTC (permalink / raw)
To: Ammar Faizi
Cc: Muhammad Rizki, GNU/Weeb Mailing List, Alviro Iskandar Setiawan
I want to easily create a chat link when the pyrogram's Chat object
sometimes doesn't have an invite_link value (None), so I create it
myself and call it in packages/plugins/commands/manage_broadcast.py
Signed-off-by: Muhammad Rizki <[email protected]>
---
.../packages/plugins/commands/manage_broadcast.py | 3 ++-
daemon/scraper/utils.py | 13 ++++++++++++-
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/daemon/packages/plugins/commands/manage_broadcast.py b/daemon/packages/plugins/commands/manage_broadcast.py
index 8397508..e0cc0dc 100644
--- a/daemon/packages/plugins/commands/manage_broadcast.py
+++ b/daemon/packages/plugins/commands/manage_broadcast.py
@@ -6,6 +6,7 @@
from pyrogram.types import Message
from pyrogram import filters, enums
from packages import DaemonClient
+from scraper import utils
@DaemonClient.on_message(
@@ -24,7 +25,7 @@ async def add_broadcast(c: DaemonClient, m: Message):
type=str(m.chat.type),
created_at=m.date,
username=m.chat.username,
- link=m.chat.invite_link
+ link=utils.create_chat_link(m.chat)
)
if inserted is None:
diff --git a/daemon/scraper/utils.py b/daemon/scraper/utils.py
index d894c32..e89255b 100644
--- a/daemon/scraper/utils.py
+++ b/daemon/scraper/utils.py
@@ -4,7 +4,7 @@
# Copyright (C) 2022 Ammar Faizi <[email protected]>
#
-from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton
+from pyrogram.types import Chat, InlineKeyboardMarkup, InlineKeyboardButton
from email.message import Message
from typing import Dict
from slugify import slugify
@@ -263,3 +263,14 @@ def button_numbers(data: list, callback_prefix: str, limit: int = 8):
buttons = [lst[i:i + limit ] for i in range(0, len(lst), limit)]
return InlineKeyboardMarkup(buttons)
+
+
+def create_chat_link(chat: Chat):
+ if chat.invite_link:
+ return chat.invite_link
+
+ if chat.username:
+ return f"t.me/{chat.username}"
+
+ chat_id_str = str(chat.id).replace("-100","")
+ return f"t.me/c/{chat_id_str}/1"
--
Muhammad Rizki
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 18/19] Add /del_bc bot command
2022-08-01 0:18 [PATCH v5 00/19] New feature to handle atom URLs and broadcast Muhammad Rizki
` (16 preceding siblings ...)
2022-08-01 0:19 ` [PATCH v5 17/19] Add create_chat_link() function Muhammad Rizki
@ 2022-08-01 0:19 ` Muhammad Rizki
2022-08-02 21:47 ` Ammar Faizi
2022-08-01 0:19 ` [PATCH v5 19/19] Add del_chat callback query Muhammad Rizki
` (2 subsequent siblings)
20 siblings, 1 reply; 26+ messages in thread
From: Muhammad Rizki @ 2022-08-01 0:19 UTC (permalink / raw)
To: Ammar Faizi
Cc: Muhammad Rizki, GNU/Weeb Mailing List, Alviro Iskandar Setiawan
Add /del_bc bot command for manage delete chat from receiving email
message.
Signed-off-by: Muhammad Rizki <[email protected]>
---
.../plugins/commands/manage_broadcast.py | 34 +++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/daemon/packages/plugins/commands/manage_broadcast.py b/daemon/packages/plugins/commands/manage_broadcast.py
index e0cc0dc..a518808 100644
--- a/daemon/packages/plugins/commands/manage_broadcast.py
+++ b/daemon/packages/plugins/commands/manage_broadcast.py
@@ -34,3 +34,37 @@ async def add_broadcast(c: DaemonClient, m: Message):
msg = f"Success add this chat for receiving email messages"
await m.reply(msg)
+
+
[email protected]_message(
+ filters.command("del_bc") &
+ filters.chat(["kiizuah", "nekoha", -1001673279485])
+)
+async def del_broadcast(c: DaemonClient, m: Message):
+ if "--list" in m.text:
+ chats = c.db.get_broadcast_chats()
+ if len(chats) == 0:
+ return await m.reply("Currently empty.")
+
+ text = "List of chats that will receive email message:\n"
+ for u,i in zip(chats, range(1, len(chats)+1)):
+ text += f"{i}. **[{u[3]}]({u[5]})**\n"
+
+ text += "\nChoose one of the chat above to delete by index below."
+ return await m.reply(
+ text=text,
+ disable_web_page_preview=True,
+ reply_markup=utils.button_numbers(
+ data=chats,
+ callback_prefix="del_chat"
+ )
+ )
+
+ success = c.db.delete_broadcast(m.chat.id)
+ if not success:
+ msg = "Failed to delete this chat from receiving email message\n"
+ msg += "Maybe it's already been deleted or not exists."
+ else:
+ msg = "Success delete this chat from receiving email message"
+
+ await m.reply(msg)
--
Muhammad Rizki
^ permalink raw reply related [flat|nested] 26+ messages in thread
* Re: [PATCH v5 18/19] Add /del_bc bot command
2022-08-01 0:19 ` [PATCH v5 18/19] Add /del_bc bot command Muhammad Rizki
@ 2022-08-02 21:47 ` Ammar Faizi
0 siblings, 0 replies; 26+ messages in thread
From: Ammar Faizi @ 2022-08-02 21:47 UTC (permalink / raw)
To: Muhammad Rizki; +Cc: GNU/Weeb Mailing List, Alviro Iskandar Setiawan
On 8/1/22 7:19 AM, Muhammad Rizki wrote:
> + if len(chats) == 0:
> + return await m.reply("Currently empty.")
> +
> + text = "List of chats that will receive email message:\n"
> + for u,i in zip(chats, range(1, len(chats)+1)):
> + text += f"{i}. **[{u[3]}]({u[5]})**\n"
> +
A trailing whitespace here.
> + text += "\nChoose one of the chat above to delete by index below."
> + return await m.reply(
> + text=text,
> + disable_web_page_preview=True,
> + reply_markup=utils.button_numbers(
> + data=chats,
> + callback_prefix="del_chat"
> + )
> + )
> +
A trailing whitespace here.
> + success = c.db.delete_broadcast(m.chat.id)
> + if not success:
--
Ammar Faizi
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH v5 19/19] Add del_chat callback query
2022-08-01 0:18 [PATCH v5 00/19] New feature to handle atom URLs and broadcast Muhammad Rizki
` (17 preceding siblings ...)
2022-08-01 0:19 ` [PATCH v5 18/19] Add /del_bc bot command Muhammad Rizki
@ 2022-08-01 0:19 ` Muhammad Rizki
2022-08-02 21:47 ` Ammar Faizi
2022-08-03 0:13 ` [PATCH v5 00/19] New feature to handle atom URLs and broadcast Ammar Faizi
2022-08-03 0:14 ` Ammar Faizi
20 siblings, 1 reply; 26+ messages in thread
From: Muhammad Rizki @ 2022-08-01 0:19 UTC (permalink / raw)
To: Ammar Faizi
Cc: Muhammad Rizki, GNU/Weeb Mailing List, Alviro Iskandar Setiawan
I want to easily remove chat by index remotely using bot message button,
easily just press the button number in /del_chat bot command.
Signed-off-by: Muhammad Rizki <[email protected]>
---
daemon/packages/plugins/callbacks/del_chat.py | 36 +++++++++++++++++++
1 file changed, 36 insertions(+)
create mode 100644 daemon/packages/plugins/callbacks/del_chat.py
diff --git a/daemon/packages/plugins/callbacks/del_chat.py b/daemon/packages/plugins/callbacks/del_chat.py
new file mode 100644
index 0000000..d8ba569
--- /dev/null
+++ b/daemon/packages/plugins/callbacks/del_chat.py
@@ -0,0 +1,36 @@
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Copyright (C) 2022 Muhammad Rizki <[email protected]>
+#
+
+from packages import DaemonClient
+from scraper import utils
+from pyrogram.types import CallbackQuery
+
+
[email protected]_callback_query(group=2)
+async def on_del_chat(c: DaemonClient, cb: CallbackQuery):
+ if not "del_chat" in cb.data:
+ return
+
+ chats = c.db.get_broadcast_chats()
+ if not bool(chats):
+ return await cb.answer("Currently empty.")
+
+ index = int(utils.remove_command(cb.data))
+ chat = chats[index - 1]
+ chat_id = chat[1]
+ chat_name = chat[3]
+
+ success = c.db.delete_broadcast(chat_id)
+ if not success:
+ msg = f"Failed to delete {chat_name} from receiving email message\n"
+ msg += "Maybe it's already been deleted or not exists."
+ else:
+ msg = f"Success delete {chat_name} from receiving email message"
+
+ await cb.answer(msg, show_alert=True)
+
+ await cb.message.delete()
+ if cb.message.reply_to_message:
+ await cb.message.reply_to_message.delete()
--
Muhammad Rizki
^ permalink raw reply related [flat|nested] 26+ messages in thread
* Re: [PATCH v5 00/19] New feature to handle atom URLs and broadcast
2022-08-01 0:18 [PATCH v5 00/19] New feature to handle atom URLs and broadcast Muhammad Rizki
` (18 preceding siblings ...)
2022-08-01 0:19 ` [PATCH v5 19/19] Add del_chat callback query Muhammad Rizki
@ 2022-08-03 0:13 ` Ammar Faizi
2022-08-03 0:14 ` Ammar Faizi
20 siblings, 0 replies; 26+ messages in thread
From: Ammar Faizi @ 2022-08-03 0:13 UTC (permalink / raw)
To: Muhammad Rizki; +Cc: GNU/Weeb Mailing List, Alviro Iskandar Setiawan
On 8/1/22 7:18 AM, Muhammad Rizki wrote:
> Morning guys,
>
> This is v5 revision of new feature to handle atom URLs and broadcast.
I fixed the trailing whitespaces myself. I haven't fully tested this,
but it has been stalled for a while. So let's get this applied.
Note:
I expect you to send more bug fixes if we ever find bugs.
--
Ammar Faizi
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v5 00/19] New feature to handle atom URLs and broadcast
2022-08-01 0:18 [PATCH v5 00/19] New feature to handle atom URLs and broadcast Muhammad Rizki
` (19 preceding siblings ...)
2022-08-03 0:13 ` [PATCH v5 00/19] New feature to handle atom URLs and broadcast Ammar Faizi
@ 2022-08-03 0:14 ` Ammar Faizi
20 siblings, 0 replies; 26+ messages in thread
From: Ammar Faizi @ 2022-08-03 0:14 UTC (permalink / raw)
To: Muhammad Rizki
Cc: Ammar Faizi, Alviro Iskandar Setiawan, GNU/Weeb Mailing List
On Mon, 1 Aug 2022 07:18:58 +0700, Muhammad Rizki wrote:
> Morning guys,
>
> This is v5 revision of new feature to handle atom URLs and broadcast.
>
> In this series, I add a comment in ../.gitignore to define what it is
> for. I've edit for /del_bc --list to make the message disable the web
> preview in the packages/plugins/commands/manage_broadcast.py file.
>
> [...]
Applied, thanks!
[01/19] Add new table for atom URLs and broadcast chats in db.sql
commit: 7981e2fbeeca7174fe41c4a03bbea108976214e8
[02/19] Add a comment in .gitignore
commit: 19db008a1cb1d48b1eb9765b9a5bb3c91d45327b
[03/19] Add ATOM_URLS and BROADCAST_CHAT methods
commit: cd184f9fee210a29b44135a1d605fbc1f8b76fe7
[04/19] Fix MySQL InternalError: Unread result found
commit: 7c724c4ccea75b01ec25c23f0810351f4d4536bf
[05/19] Create /add_atom command
commit: b31d5f993f6a7c356f81a61bbcf3f60e673e02f1
[06/19] Add utility functions for /add_atom
commit: c5e205edf34414b97ef6a32e2d3e4002c552490b
[07/19] Refactor database methods
commit: fd22637299dc0a2bfd637f1380ff8a94e0ac19a1
[08/19] Add insert_atom() in scraper/db.py
commit: d8c7b54a4b1132478b6103df74c9511b277823fd
[09/19] Rename admin.py to debugger.py
commit: 8dd3f083c59c22e9210c1333af4a119e83e4e3c7
[10/19] Add delete_atom() function in scraper/db.py
commit: c6dafabfd0a7cf3ef1d463e0667fb9aa882549c6
[11/19] Add utility function buton_numbers()
commit: 6f60b6bd26c14e0686f69934a3ef682a15fb9216
[12/19] Move bot commands related files to packages/plugins/commands/
(no commit info)
[13/19] Add del_atom callback query
commit: 342487142d03a6e908f82c83d4a9617b24530b0b
[14/19] Add insert_broadcast() in scraper/db.py
commit: 6ef7113c4b4d57d75f59aace30977c2175c668a3
[15/19] Add delete_broadcast() in scraper/db.py
commit: 074ec6201c1d2c8dcd843c45bab8750dcaf7f62e
[16/19] Create /add_bc bot command
commit: e3c40105abc6ed17a425a6dd8c3aafcb44aaec1d
[17/19] Add create_chat_link() function
commit: 730af3f162387ee17d336a6a4fd4751de8b70174
[18/19] Add /del_bc bot command
commit: 11fb61776467d66999d6c46b132f25d5a8aa3d13
[19/19] Add del_chat callback query
commit: 06dc9b03a438dafa9fde0a5077ca92affca77563
Best regards,
--
Ammar Faizi
^ permalink raw reply [flat|nested] 26+ messages in thread