support send weixin emotion, by @monkeybad
This commit is contained in:
@@ -33,6 +33,8 @@
|
|||||||
|
|
||||||
`i->[昵称或ID]:[图片路径]` 给好友发送图片
|
`i->[昵称或ID]:[图片路径]` 给好友发送图片
|
||||||
|
|
||||||
|
`e->[昵称或ID]:[文件路径]` 给好友发送表情(jpg/gif)
|
||||||
|
|
||||||
`quit` 退出程序
|
`quit` 退出程序
|
||||||
|
|
||||||

|

|
||||||
@@ -385,6 +387,17 @@ selector:
|
|||||||
...
|
...
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### 发送 Emoji 表情
|
||||||
|
|
||||||
|
| API | webwxsendmsgemotion |
|
||||||
|
| --- | ------------ |
|
||||||
|
| url | https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsendemoticon?fun=sys&f=json&pass_ticket=xxx |
|
||||||
|
| method | POST |
|
||||||
|
| data | JSON |
|
||||||
|
| header | ContentType: application/json; charset=UTF-8 |
|
||||||
|
| params | { <br> BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx }, <br> Msg: { <br> Type: 47 `emoji消息`, <br> EmojiFlag: 2, <br> MediaId: `表情上传后的媒体ID`, <br> FromUserName: `自己ID`, <br> ToUserName: `好友ID`, <br> LocalID: `与clientMsgId相同`, <br> ClientMsgId: `时间戳左移4位随后补上4位随机数` <br> } <br> } |
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
### 图片接口
|
### 图片接口
|
||||||
|
|||||||
@@ -485,6 +485,31 @@ class WebWeixin(object):
|
|||||||
dic = r.json()
|
dic = r.json()
|
||||||
return dic['BaseResponse']['Ret'] == 0
|
return dic['BaseResponse']['Ret'] == 0
|
||||||
|
|
||||||
|
def webwxsendmsgemotion(self, user_id, media_id):
|
||||||
|
url = 'https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsendemoticon?fun=sys&f=json&pass_ticket=%s' % self.pass_ticket
|
||||||
|
clientMsgId = str(int(time.time() * 1000)) + \
|
||||||
|
str(random.random())[:5].replace('.', '')
|
||||||
|
data_json = {
|
||||||
|
"BaseRequest": self.BaseRequest,
|
||||||
|
"Msg": {
|
||||||
|
"Type": 47,
|
||||||
|
"EmojiFlag": 2,
|
||||||
|
"MediaId": media_id,
|
||||||
|
"FromUserName": self.User['UserName'],
|
||||||
|
"ToUserName": user_id,
|
||||||
|
"LocalID": clientMsgId,
|
||||||
|
"ClientMsgId": clientMsgId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
headers = {'content-type': 'application/json; charset=UTF-8'}
|
||||||
|
data = json.dumps(data_json, ensure_ascii=False).encode('utf8')
|
||||||
|
r = requests.post(url, data=data, headers=headers)
|
||||||
|
dic = r.json()
|
||||||
|
if self.DEBUG:
|
||||||
|
print json.dumps(dic, indent=4)
|
||||||
|
logging.debug(json.dumps(dic, indent=4))
|
||||||
|
return dic['BaseResponse']['Ret'] == 0
|
||||||
|
|
||||||
def _saveFile(self, filename, data, api=None):
|
def _saveFile(self, filename, data, api=None):
|
||||||
fn = filename
|
fn = filename
|
||||||
if self.saveSubFolders[api]:
|
if self.saveSubFolders[api]:
|
||||||
@@ -840,6 +865,14 @@ class WebWeixin(object):
|
|||||||
user_id = self.getUSerID(name)
|
user_id = self.getUSerID(name)
|
||||||
response = self.webwxsendmsgimg(user_id, media_id)
|
response = self.webwxsendmsgimg(user_id, media_id)
|
||||||
|
|
||||||
|
def sendEmotion(self, name, file_name):
|
||||||
|
response = self.webwxuploadmedia(file_name)
|
||||||
|
media_id = ""
|
||||||
|
if response is not None:
|
||||||
|
media_id = response['MediaId']
|
||||||
|
user_id = self.getUSerID(name)
|
||||||
|
response = self.webwxsendmsgemotion(user_id, media_id)
|
||||||
|
|
||||||
@catchKeyboardInterrupt
|
@catchKeyboardInterrupt
|
||||||
def start(self):
|
def start(self):
|
||||||
self._echo('[*] 微信网页版 ... 开动')
|
self._echo('[*] 微信网页版 ... 开动')
|
||||||
@@ -910,6 +943,11 @@ class WebWeixin(object):
|
|||||||
[name, file_name] = text[3:].split(':')
|
[name, file_name] = text[3:].split(':')
|
||||||
self.sendImg(name, file_name)
|
self.sendImg(name, file_name)
|
||||||
logging.debug('发送图片')
|
logging.debug('发送图片')
|
||||||
|
elif text[:3] == 'e->':
|
||||||
|
print '发送表情'
|
||||||
|
[name, file_name] = text[3:].split(':')
|
||||||
|
self.sendEmotion(name, file_name)
|
||||||
|
logging.debug('发送表情')
|
||||||
|
|
||||||
def _safe_open(self, path):
|
def _safe_open(self, path):
|
||||||
if self.autoOpen:
|
if self.autoOpen:
|
||||||
|
|||||||
Reference in New Issue
Block a user