Skip to content

Commit e8d26a4

Browse files
committed
1.4.4-dev.7: Introduced new parameter for EFBMsg object: filename
1 parent d4b5ea6 commit e8d26a4

File tree

5 files changed

+26
-17
lines changed

5 files changed

+26
-17
lines changed

channel.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ class EFBMsg:
101101
channel_id (str): ID for the source channel
102102
channel_name (str): Name of the source channel
103103
destination (dict): Destination (may be a user or a group)
104-
member (dict): Author of this msg in a group. `None` for priv msgs.
104+
member (dict): Author of this msg in a group. `None` for private messages.
105105
origin (dict): Origin (may be a user or a group)
106106
source (MsgSource): Source of message: User/Group/System
107107
target (dict): Target (refers to @ messages and "reply to" messages.)
@@ -110,8 +110,9 @@ class EFBMsg:
110110
uid (str): Unique ID of message
111111
url (str): URL of multimedia file/Link share. `None` if N/A
112112
path (str): Local path of multimedia file. `None` if N/A
113-
file (file): File object to multimedia object, type "ra". `None` if N/A
113+
file (file): File object to multimedia file, type "ra". `None` if N/A
114114
mime (str): MIME type of the file. `None` if N/A
115+
filename (str): File name of the multimedia file. `None` if N/A
115116
116117
`target`:
117118
There are 3 types of targets: `Member`, `Message`, and `Substitution`
@@ -247,6 +248,7 @@ class EFBMsg:
247248
path = None
248249
file = None
249250
mime = None
251+
filename = None
250252
attributes = {}
251253

252254
def __init__(self, channel=None):

docs/message.md

+5-4
Original file line numberDiff line numberDiff line change
@@ -130,33 +130,34 @@ Picture type, may include GIF images. Stickers are not included. `text` for capt
130130
* `path`: Relative path to the image, e.g. `storage/my_slave_channel/picture_1234567890.png`
131131
* `mime`: MIME type string of the file, e.g. `image/png`
132132
* `file`: File object of the image, done by `open(msg.path, 'rb')`
133+
* `filename` (_optional_): Original filename, `None` if not available.
133134

134135
> Definition for `path`, `mime`, `file` is similar for other multimedia files.
135136
136137
### Stickers
137138
**Type**: MsgType.Sticker
138-
**Additional Parameters**: path, mime, file
139+
**Additional Parameters**: path, mime, file, filename
139140

140141
Sticker messages.
141142
Specification for `path`, `mime`, `file` refer to `MsgType.Image`.
142143

143144
### Audio/Music/Voice
144145
**Type**: MsgType.Audio
145-
**Additional Parameters**: path, mime, file
146+
**Additional Parameters**: path, mime, file, filename
146147

147148
Audio message, including music file and voice message.
148149
Specification for `path`, `mime`, `file` refer to `MsgType.Image`.
149150

150151
### Video
151152
**Type**: MsgType.Video
152-
**Additional Parameters**: path, mime, file
153+
**Additional Parameters**: path, mime, file, filename
153154

154155
Video message.
155156
Specification for `path`, `mime`, `file` refer to `MsgType.Image`.
156157

157158
### File
158159
**Type**: MsgType.File
159-
**Additional Parameters**: path, mime, file
160+
**Additional Parameters**: path, mime, file, filename
160161

161162
File message.
162163
Specification for `path`, `mime`, `file` refer to `MsgType.Image`.

main.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
if sys.version_info.major < 3:
1111
raise Exception("Python 3.x is required. Your version is %s." % sys.version)
1212

13-
__version__ = "1.4.4-dev.6"
13+
__version__ = "1.4.4-dev.7"
1414

1515
parser = argparse.ArgumentParser(description="EH Forwarder Bot is an extensible chat tunnel framework which allows "
1616
"users to contact people from other chat platforms, and ultimately "

plugins/eh_telegram_master/__init__.py

+10-5
Original file line numberDiff line numberDiff line change
@@ -339,11 +339,11 @@ def process_msg(self, msg):
339339
tg_msg = self.bot.bot.send_message(tg_dest,
340340
msg_template % ("Error: Empty %s received. (MS02)" % msg.type))
341341
else:
342-
if not msg.text:
342+
if not msg.filename:
343343
file_name = os.path.basename(msg.path)
344344
msg.text = "sent a file."
345345
else:
346-
file_name = msg.text
346+
file_name = msg.filename
347347
tg_msg = self.bot.bot.send_document(tg_dest, msg.file, caption=msg_template % msg.text,
348348
filename=file_name)
349349
os.remove(msg.path)
@@ -955,12 +955,14 @@ def msg(self, bot, update):
955955
tg_file_id = update.message.document.file_id
956956
self.logger.debug("tg: Document file received")
957957
if update.message.document.mime_type == "video/mp4":
958-
self.logger.debug("tg: GIF received")
958+
self.logger.debug("tg: Telegram GIF received")
959959
m.type = MsgType.Image
960960
m.path, m.mime = self._download_gif(update.message, tg_file_id, m.type)
961961
else:
962962
m.type = MsgType.File
963963
m.path, m.mime = self._download_file(update.message, tg_file_id, m.type)
964+
m.mime = update.message.document.mime_type or m.mime
965+
m.filename = getattr(update.message.document, "file_name", None) or None
964966
m.file = open(m.path, "rb")
965967
elif mtype == TGMsgType.Video:
966968
m.type = MsgType.Video
@@ -1026,8 +1028,11 @@ def _download_file(self, tg_msg, file_id, msg_type):
10261028
mime = magic.from_file(fullpath, mime=True)
10271029
if type(mime) is bytes:
10281030
mime = mime.decode()
1029-
ext = mimetypes.guess_extension(mime).split(".")[-1]
1030-
os.rename(fullpath, "%s.%s" % (fullpath, ext))
1031+
guess_ext = mimetypes.guess_extension(mime) or ".unknown"
1032+
if guess_ext == ".unknown":
1033+
self.logger.warning("File %s with mime %s has no matching extensions.", fullpath, mime)
1034+
ext = ".jpeg" if mime == "image/jpeg" else guess_ext
1035+
os.rename(fullpath, "%s%s" % (fullpath, ext))
10311036
fullpath = "%s.%s" % (fullpath, ext)
10321037
return fullpath, mime
10331038

plugins/eh_wechat_slave.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,7 @@ def fileMsg(self, msg, isGroupChat=False):
535535
mobj.type = MsgType.File
536536
mobj.path, mobj.mime = self.save_file(msg, mobj.type)
537537
mobj.text = msg['FileName']
538+
mobj.filename = msg['FileName'] or None
538539
mobj.file = open(mobj.path, "rb")
539540
return mobj
540541

@@ -625,10 +626,10 @@ def save_file(self, msg, msg_type):
625626
if type(mime) is bytes:
626627
mime = mime.decode()
627628
guess_ext = mimetypes.guess_extension(mime) or ".unknown"
628-
if guess_ext == "unknown":
629+
if guess_ext == ".unknown":
629630
self.logger.warning("File %s with mime %s has no matching extensions.", fullpath, mime)
630-
ext = "jpg" if mime == "image/jpeg" else guess_ext[1:]
631-
os.rename(fullpath, "%s.%s" % (fullpath, ext))
631+
ext = ".jpeg" if mime == "image/jpeg" else guess_ext
632+
os.rename(fullpath, "%s%s" % (fullpath, ext))
632633
fullpath = "%s.%s" % (fullpath, ext)
633634
self.logger.info("File saved from WeChat\nFull path: %s\nMIME: %s", fullpath, mime)
634635
return fullpath, mime
@@ -714,8 +715,8 @@ def send_message(self, msg):
714715
except FileNotFoundError:
715716
pass
716717
elif msg.type in (MsgType.File, MsgType.Audio):
717-
self.logger.info("Sending %s to WeChat\nFileName: %s\nPath: %s", msg.type, msg.text, msg.path)
718-
r = self._itchat_send_file(msg.path, UserName)
718+
self.logger.info("Sending %s to WeChat\nFileName: %s\nPath: %s\nFilename: %s", msg.type, msg.text, msg.path, msg.filename)
719+
r = self._itchat_send_file(msg.path, UserName, filename=msg.filename)
719720
if msg.text:
720721
self._itchat_send_msg(msg.text, UserName)
721722
os.remove(msg.path)

0 commit comments

Comments
 (0)