From 4864466517449e38ede52ae33b810fd726c30fbe Mon Sep 17 00:00:00 2001 From: lifegpc Date: Wed, 18 Jan 2023 10:02:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=AE=A1=E7=90=86=E8=8F=9C?= =?UTF-8?q?=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- RSSEntry.py | 1 + database.py | 20 ++++++++++++++++++++ manage.py | 51 ++++++++++++++++++++++++++++++++++++++++++++++++--- rssbot.py | 18 ++++++++++++++++-- 4 files changed, 85 insertions(+), 5 deletions(-) diff --git a/RSSEntry.py b/RSSEntry.py index 4ea553f..72b2a2f 100644 --- a/RSSEntry.py +++ b/RSSEntry.py @@ -190,6 +190,7 @@ class RSSEntry: except Exception: self._settings = {} self.chatList = [] + self.chatListLoaded = False self.hashList = HashEntries(maxCount) self.hashListLoaded = False diff --git a/database.py b/database.py index 1f47e1b..cc2b7e8 100644 --- a/database.py +++ b/database.py @@ -315,6 +315,7 @@ class database: for i2 in cur2: temp2 = ChatEntry(i2, temp._settings) temp.chatList.append(temp2) + temp.chatListLoaded = True if len(temp.chatList) == 0: self.__removeRSSEntry(temp.id) else: @@ -365,6 +366,25 @@ class database: return i[0] return None + def getRSSChatById(self, i: RSSEntry, chatId: int): + with self._value_lock: + cur = self._db.execute("SELECT * FROM chatList WHERE id = ? AND chatId = ?;", (i.id, chatId)) + i.chatListLoaded = False + i.chatList.clear() + for i2 in cur: + i.chatList.append(ChatEntry(i2, i._settings)) + + + def getRSSChatList(self, i: RSSEntry): + if i.chatListLoaded: + return + with self._value_lock: + cur = self._db.execute("SELECT * FROM chatList WHERE id = ?;", (i.id,)) + i.chatList.clear() + for i2 in cur: + i.chatList.append(ChatEntry(i2, i._settings)) + i.chatListLoaded = True + def getRSSHashList(self, i: RSSEntry): if i.hashListLoaded: return True diff --git a/manage.py b/manage.py index 71e77ff..2f1f85d 100644 --- a/manage.py +++ b/manage.py @@ -170,6 +170,13 @@ def getTextContentForRSSInManageList(m, rssEntry: RSSEntry, s: settings, chatId: text.addtotext(f"发送媒体:{config.send_media}") text += f"单独一行显示链接:{config.display_entry_link}" text += f"发送图片为文件:{config.send_img_as_file}" + if config.thread_ids.isEnabled: + text += f"发送到默认话题:{config.thread_ids._without_id}" + text += f"要发送到的话题ID列表:" + for i in config.thread_ids._list: + text += f"{i}" + else: + text += "未启用发送到话题功能" if have_rssbotlib: text += f'发送原始像素格式的Pixiv动图:{config.send_ugoira_with_origin_pix_fmt}' text += f'发送Pixiv动图为{config.send_ugoira_method}' @@ -183,17 +190,55 @@ def getTextContentForRSSInManageList(m, rssEntry: RSSEntry, s: settings, chatId: return text.tostr() -def getInlineKeyBoardForRSSInManageList(rss: RSSEntry, index: int, chatId: int = None, chatIndex: int = None): +def getInlineKeyBoardForRSSInManageList(rss: RSSEntry, index: int, base: str, chatId: int = None, chatIndex: int = None, m = None, page: int = None, lastPage: bool = False): d = [] i = -1 d.append([]) i += 1 have_chat_id = chatId is not None and chatIndex is not None if have_chat_id: - d[i].append({'text': '取消订阅', 'callback_data': f'3,{InlineKeyBoardForManage.ManageByChatId.value},{InlineKeyBoardForManage.ChatManage.value},{chatIndex},{chatId},{InlineKeyBoardForManage.RSSManage.value},{index},{rss.id},{InlineKeyBoardForManage.Unsubscribe.value}'}) + d[i].append({'text': '取消订阅', 'callback_data': f'{base},{InlineKeyBoardForManage.RSSManage.value},{index},{rss.id},{InlineKeyBoardForManage.Unsubscribe.value}'}) + else: + from rssbot import main + if m is None: + raise ValueError('m must not be None.') + m: main = m + m._db.getRSSChatList(rss) + lineLimit = 7 + chatCount = len(rss.chatList) + pn = ceil(chatCount / lineLimit) + if lastPage: + page = pn + if chatIndex is not None and chatIndex >= 0: + page = floor(chatIndex / lineLimit) + 1 + if page is None: + page = 1 + if chatCount != 0: + page = max(min(pn, page), 1) + s = max(lineLimit * (page - 1), 0) + n = min(lineLimit * page, chatCount) + while s < n: + chat: ChatEntry = rss.chatList[s] + d.append([]) + i = i + 1 + d[i].append({'text': m.getChatName(chat.chatId), 'callback_data': f'{base},{InlineKeyBoardForManage.RSSManage.value},{index},{rss.id},{InlineKeyBoardForManage.ChatManage.value},{s},{chat.chatId}' }) + s += 1 + if pn != 1: + d.append([]) + i += 1 + if page != 1: + d[i].append({'text': '上一页', 'callback_data': f'{base},{InlineKeyBoardForManage.RSSManage.value},{index},{rss.id},{InlineKeyBoardForManage.PrevPage.value},{page}'}) + if page != pn: + d[i].append({'text': '下一页', 'callback_data': f'{base},{InlineKeyBoardForManage.RSSManage.value},{index},{rss.id},{InlineKeyBoardForManage.NextPage.value},{page}'}) + d.append([]) + i = i + 1 + if page != 1: + d[i].append({'text': '首页', 'callback_data': f'{base},{InlineKeyBoardForManage.RSSManage.value},{index},{rss.id},{InlineKeyBoardForManage.FirstPage.value}'}) + if page != pn: + d[i].append({'text': '尾页', 'callback_data': f'{base},{InlineKeyBoardForManage.RSSManage.value},{index},{rss.id},{InlineKeyBoardForManage.LastPage.value}'}) d.append([]) i += 1 - d[i].append({'text': '返回', 'callback_data': (f'3,{InlineKeyBoardForManage.ManageByChatId.value},{InlineKeyBoardForManage.ChatManage.value},{chatIndex},{chatId}' if have_chat_id else f'3,{InlineKeyBoardForManage.ManageByRSS.value}') + f',{InlineKeyBoardForManage.BackToList.value},{index}' }) + d[i].append({'text': '返回', 'callback_data': f'{base},{InlineKeyBoardForManage.BackToList.value},{index}' }) return {'inline_keyboard': d} diff --git a/rssbot.py b/rssbot.py index 24b521d..eb03c75 100644 --- a/rssbot.py +++ b/rssbot.py @@ -2518,10 +2518,24 @@ class callbackQueryHandle(Thread): rssEntry = self._main._db.getRSSByIdAndChatId(rssManageRSSId, rssManageChatId) else: rssEntry = self._main._db.getRSSById(rssManageRSSId) - if rssManageCommand is None: + if rssManageCommand is None or rssManageCommand in [InlineKeyBoardForManage.FirstPage, InlineKeyBoardForManage.ChatManage, InlineKeyBoardForManage.BackToList]: + if rssManageCommand == InlineKeyBoardForManage.ChatManage: + try: + rssManageChatIndex = int(rssManageSubList[0]) + rssManageChatId = int(rssManageSubList[1]) + except Exception: + self.answer('未知的按钮。') + return + self._main._db.getRSSChatById(rssEntry, rssManageChatId) di['text'] = getTextContentForRSSInManageList(self._main, rssEntry, self._main._setting, rssManageChatId) di['parse_mode'] = 'HTML' - di['reply_markup'] = getInlineKeyBoardForRSSInManageList(rssEntry, rssManageIndex, rssManageChatId, rssManageChatIndex) + if self._inlineKeyBoardForManageCommand == InlineKeyBoardForManage.ManageByChatId: + base = f'3,{InlineKeyBoardForManage.ManageByChatId.value},{InlineKeyBoardForManage.ChatManage.value},{rssManageChatIndex},{rssManageChatId}' + else: + base = f'3,{InlineKeyBoardForManage.ManageByRSS.value}' + if rssManageCommand == InlineKeyBoardForManage.ChatManage: + base += f',{InlineKeyBoardForManage.RSSManage.value},{rssManageIndex},{rssEntry.id}' + di['reply_markup'] = getInlineKeyBoardForRSSInManageList(rssEntry, rssManageIndex, base, rssManageChatId, rssManageChatIndex, self._main) self._main._request("editMessageText", "post", json=di) return elif rssManageCommand == InlineKeyBoardForManage.Unsubscribe: