update Unsubscribe

This commit is contained in:
2021-01-09 09:39:02 +08:00
parent da30270174
commit a7d232a06b
3 changed files with 60 additions and 4 deletions

View File

@@ -197,6 +197,15 @@ PRIMARY KEY (hash)
pass
return userStatus.normalStatus, ''
def removeItemInChatList(self, chatId: int, id: str):
with self._value_lock:
try:
self._db.execute(
f"DELETE FROM chatList WHERE chatId={chatId} AND id='{id}'")
return True
except:
return False
def setUserStatus(self, userId: int, status: userStatus = userStatus.normalStatus, hashd: str = '') -> bool:
with self._value_lock:
try:

View File

@@ -30,7 +30,7 @@ from random import randrange
from textc import textc, removeEmptyLine, decodeURI
from re import search, I
from rsschecker import RSSCheckerThread
from rsslist import getInlineKeyBoardForRSSList, InlineKeyBoardForRSSList, getInlineKeyBoardForRSSInList, getTextContentForRSSInList
from rsslist import getInlineKeyBoardForRSSList, InlineKeyBoardForRSSList, getInlineKeyBoardForRSSInList, getTextContentForRSSInList, getInlineKeyBoardForRSSUnsubscribeInList, getTextContentForRSSUnsubscribeInList
from usercheck import checkUserPermissionsInChat, UserPermissionsInChatCheckResult
import sys
@@ -866,13 +866,12 @@ class callbackQueryHandle(Thread):
'message_id': self._data['message']['message_id']}
self._main._request("deleteMessage", "post", json=di)
return
elif self._inlineKeyBoardForRSSListCommand == InlineKeyBoardForRSSList.Content:
elif self._inlineKeyBoardForRSSListCommand in [InlineKeyBoardForRSSList.Content, InlineKeyBoardForRSSList.CancleUnsubscribe]:
di = {'chat_id': self._data['message']['chat']['id'],
'message_id': self._data['message']['message_id']}
rssList = self._main._db.getRSSListByChatId(chatId)
ind = int(self._inputList[3])
if ind >= len(rssList):
ind = len(rssList) - 1
ind = max(min(ind, len(rssList)), 0)
di['text'] = getTextContentForRSSInList(rssList[ind])
di['parse_mode'] = 'HTML'
di['reply_markup'] = getInlineKeyBoardForRSSInList(
@@ -891,6 +890,42 @@ class callbackQueryHandle(Thread):
self._main._request("editMessageText", "post", json=di)
self.answer()
return
elif self._inlineKeyBoardForRSSListCommand == InlineKeyBoardForRSSList.Unsubscribe:
di = {'chat_id': self._data['message']['chat']['id'],
'message_id': self._data['message']['message_id']}
rssList = self._main._db.getRSSListByChatId(chatId)
ind = int(self._inputList[3])
ind = max(min(ind, len(rssList)), 0)
di['text'] = getTextContentForRSSUnsubscribeInList(
rssList[ind])
di['parse_mode'] = 'HTML'
di['reply_markup'] = getInlineKeyBoardForRSSUnsubscribeInList(
chatId, rssList[ind], ind)
self._main._request("editMessageText", "post", json=di)
self.answer()
return
elif self._inlineKeyBoardForRSSListCommand == InlineKeyBoardForRSSList.ConfirmUnsubscribe:
di = {'chat_id': self._data['message']['chat']['id'],
'message_id': self._data['message']['message_id']}
rssList = self._main._db.getRSSListByChatId(chatId)
ind = int(self._inputList[3])
if ind >= len(rssList) or ind < 0:
self.answer('取消订阅失败:无效的索引。')
else:
unsubscribed = self._main._db.removeItemInChatList(
chatId, rssList[ind].id)
if unsubscribed:
self.answer('取消订阅成功。')
ind = ind - 1
else:
self.answer('取消订阅失败:数据库删除失败。')
rssList = self._main._db.getRSSListByChatId(chatId)
ind = max(min(ind, len(rssList)), 0)
di['text'] = '列表如下:'
di['reply_markup'] = getInlineKeyBoardForRSSList(
chatId, rssList, itemIndex=ind)
self._main._request("editMessageText", "post", json=di)
return
else:
self.answer('未知的按钮。')
return

View File

@@ -116,3 +116,15 @@ def getInlineKeyBoardForRSSInList(chatId: int, rssEntry: RSSEntry, index: int) -
d[i].append(
{'text': '返回', 'callback_data': f'1,{chatId},{InlineKeyBoardForRSSList.BackToList.value},{index}'})
return {'inline_keyboard': d}
def getInlineKeyBoardForRSSUnsubscribeInList(chatId: int, rssEntry: RSSEntry, index: int) -> dict:
d = []
i = -1
d.append([])
i = i + 1
d[i].append(
{'text': '', 'callback_data': f'1,{chatId},{InlineKeyBoardForRSSList.ConfirmUnsubscribe.value},{index}'})
d[i].append(
{'text': '', 'callback_data': f'1,{chatId},{InlineKeyBoardForRSSList.CancleUnsubscribe.value},{index}'})
return {'inline_keyboard': d}