single picture and text message support long text

This commit is contained in:
2021-01-22 22:57:32 +08:00
parent 03bf873df1
commit 3a8703025a
3 changed files with 84 additions and 19 deletions

View File

@@ -188,26 +188,57 @@ class main:
if not config.send_media or (getListCount(content, 'imgList') == 0 and getListCount(content, 'videoList') == 0):
if config.disable_web_page_preview:
di['disable_web_page_preview'] = True
di['text'] = text.tostr()
di['parse_mode'] = 'HTML'
re = self._request('sendMessage', 'post', json=di)
while len(text) > 0:
di['text'] = text.tostr()
di['parse_mode'] = 'HTML'
for i in range(self._setting._maxRetryCount + 1):
re = self._request('sendMessage', 'post', json=di)
if re is not None and 'ok' in re and re['ok']:
di['reply_to_message_id'] = re['result']['message_id']
break
if i == self._setting._maxRetryCount:
if returnError and re is not None and 'description' in re:
return False, re['description']
else:
return False, ''
elif getListCount(content, 'imgList') == 1 and getListCount(content, 'videoList') == 0:
di['caption'] = text.tostr()
di['parse_mode'] = 'HTML'
if not self._setting._downloadMediaFile:
di['photo'] = content['imgList'][0]
re = self._request('sendPhoto', 'post', json=di)
else:
fileEntry = self._tempFileEntries.add(content['imgList'][0])
if not fileEntry.ok:
return None
if self._setting._sendFileURLScheme:
di['photo'] = fileEntry._localURI
re = self._request('sendPhoto', 'post', json=di)
f = True
while len(text) > 0:
if f:
di['caption'] = text.tostr(1024)
else:
fileEntry.open()
re = self._request('sendPhoto', 'post', json=di, files={
'photo': (fileEntry._fullfn, fileEntry._f)})
di['text'] = text.tostr()
di['parse_mode'] = 'HTML'
for i in range(self._setting._maxRetryCount + 1):
if f:
if not self._setting._downloadMediaFile:
di['photo'] = content['imgList'][0]
re = self._request('sendPhoto', 'post', json=di)
else:
fileEntry = self._tempFileEntries.add(content['imgList'][0])
if not fileEntry.ok:
continue
if self._setting._sendFileURLScheme:
di['photo'] = fileEntry._localURI
re = self._request('sendPhoto', 'post', json=di)
else:
fileEntry.open()
re = self._request('sendPhoto', 'post', json=di, files={'photo': (fileEntry._fullfn, fileEntry._f)})
else:
re = self._request('sendMessage', 'post', json=di)
if re is not None and 'ok' in re and re['ok']:
di['reply_to_message_id'] = re['result']['message_id']
if f:
del di['caption']
if 'photo' in di:
del di['photo']
f = False
break
if i == self._setting._maxRetryCount:
if returnError and re is not None and 'description' in re:
return False, re['description']
else:
return False, ''
elif getListCount(content, 'imgList') == 0 and getListCount(content, 'videoList') == 1:
di['caption'] = text.tostr()
di['parse_mode'] = 'HTML'

View File

@@ -349,6 +349,7 @@ class RSSParser:
try:
if fn.find('://') > -1:
re = requests.get(fn)
re.encoding = 'utf8'
if re.status_code == 200:
self.xmldoc = minidom.parseString(re.text)
else:

View File

@@ -18,12 +18,45 @@ from urllib.parse import unquote
class textc:
def __len__(self):
return len(self.__str)
def __init__(self):
self.__str = ''
self.__max = 4096
def tostr(self):
def __str__(self):
return self.__str
def checklen(self):
return len(self) <= self.__max
def cut(self):
"""TODO: Need check html is not breaked
TODO: Need calculate char limits after parsed"""
l = self.__str.splitlines(True)
r = ''
while len(f"{r}{l[0]}") <= self.__max:
r = r + l[0]
l = l[1:]
if len(r) == 0:
r = l[0][:self.__max]
l[0] = l[0][self.__max:]
t = ''
for i in l:
t = t + i
self.__str = t
return r
def tostr(self, maxLength: int = 4096):
self.__max = maxLength
if self.checklen():
t = self.__str
self.__str = ''
return t
else:
return self.cut()
def addtotext(self, s: str):
if self.__str == '':
self.__str = f"{self.__str}{s}"