Merge commit 'a951a719d1518883474f36579b63bb8f9c4f0494' into pro
@ -718,6 +718,7 @@ class DialogController extends AbstractController
|
||||
}
|
||||
//
|
||||
$dialog_id = intval(Request::input('dialog_id'));
|
||||
$dialog_ids = trim(Request::input('dialog_ids'));
|
||||
$update_id = intval(Request::input('update_id'));
|
||||
$update_mark = !($user->bot && in_array(strtolower(trim(Request::input('update_mark'))), ['no', 'false', '0']));
|
||||
$reply_id = intval(Request::input('reply_id'));
|
||||
@ -725,59 +726,65 @@ class DialogController extends AbstractController
|
||||
$text_type = strtolower(trim(Request::input('text_type')));
|
||||
$silence = in_array(strtolower(trim(Request::input('silence'))), ['yes', 'true', '1']);
|
||||
$markdown = in_array($text_type, ['md', 'markdown']);
|
||||
//
|
||||
WebSocketDialog::checkDialog($dialog_id);
|
||||
//
|
||||
if ($update_id > 0) {
|
||||
$action = $update_mark ? "update-$update_id" : "change-$update_id";
|
||||
} elseif ($reply_id > 0) {
|
||||
$action = "reply-$reply_id";
|
||||
} else {
|
||||
$action = "";
|
||||
}
|
||||
//
|
||||
if (!$markdown) {
|
||||
$text = WebSocketDialogMsg::formatMsg($text, $dialog_id);
|
||||
}
|
||||
$strlen = mb_strlen($text);
|
||||
$noimglen = mb_strlen(preg_replace("/<img[^>]*?>/i", "", $text));
|
||||
if ($strlen < 1) {
|
||||
return Base::retError('消息内容不能为空');
|
||||
}
|
||||
if ($noimglen > 200000) {
|
||||
return Base::retError('消息内容最大不能超过200000字');
|
||||
}
|
||||
if ($noimglen > 5000) {
|
||||
// 内容过长转成文件发送
|
||||
$path = "uploads/chat/" . date("Ym") . "/" . $dialog_id . "/";
|
||||
Base::makeDir(public_path($path));
|
||||
$path = $path . md5($text) . ".htm";
|
||||
$file = public_path($path);
|
||||
file_put_contents($file, $text);
|
||||
$size = filesize(public_path($path));
|
||||
if (empty($size)) {
|
||||
return Base::retError('消息发送保存失败');
|
||||
//
|
||||
$result = [];
|
||||
$dialogIds = $dialog_ids ? explode(',', $dialog_ids) : [$dialog_id ?: 0];
|
||||
foreach($dialogIds as $dialog_id) {
|
||||
//
|
||||
WebSocketDialog::checkDialog($dialog_id);
|
||||
//
|
||||
if ($update_id > 0) {
|
||||
$action = $update_mark ? "update-$update_id" : "change-$update_id";
|
||||
} elseif ($reply_id > 0) {
|
||||
$action = "reply-$reply_id";
|
||||
} else {
|
||||
$action = "";
|
||||
}
|
||||
$ext = $markdown ? 'md' : 'htm';
|
||||
$fileData = [
|
||||
'name' => "LongText-{$strlen}.{$ext}",
|
||||
'size' => $size,
|
||||
'file' => $file,
|
||||
'path' => $path,
|
||||
'url' => Base::fillUrl($path),
|
||||
'thumb' => '',
|
||||
'width' => -1,
|
||||
'height' => -1,
|
||||
'ext' => $ext,
|
||||
];
|
||||
return WebSocketDialogMsg::sendMsg($action, $dialog_id, 'file', $fileData, $user->userid, false, false, $silence);
|
||||
//
|
||||
if (!$markdown) {
|
||||
$text = WebSocketDialogMsg::formatMsg($text, $dialog_id);
|
||||
}
|
||||
$strlen = mb_strlen($text);
|
||||
$noimglen = mb_strlen(preg_replace("/<img[^>]*?>/i", "", $text));
|
||||
if ($strlen < 1) {
|
||||
return Base::retError('消息内容不能为空');
|
||||
}
|
||||
if ($noimglen > 200000) {
|
||||
return Base::retError('消息内容最大不能超过200000字');
|
||||
}
|
||||
if ($noimglen > 5000) {
|
||||
// 内容过长转成文件发送
|
||||
$path = "uploads/chat/" . date("Ym") . "/" . $dialog_id . "/";
|
||||
Base::makeDir(public_path($path));
|
||||
$path = $path . md5($text) . ".htm";
|
||||
$file = public_path($path);
|
||||
file_put_contents($file, $text);
|
||||
$size = filesize(public_path($path));
|
||||
if (empty($size)) {
|
||||
return Base::retError('消息发送保存失败');
|
||||
}
|
||||
$ext = $markdown ? 'md' : 'htm';
|
||||
$fileData = [
|
||||
'name' => "LongText-{$strlen}.{$ext}",
|
||||
'size' => $size,
|
||||
'file' => $file,
|
||||
'path' => $path,
|
||||
'url' => Base::fillUrl($path),
|
||||
'thumb' => '',
|
||||
'width' => -1,
|
||||
'height' => -1,
|
||||
'ext' => $ext,
|
||||
];
|
||||
$result = WebSocketDialogMsg::sendMsg($action, $dialog_id, 'file', $fileData, $user->userid, false, false, $silence);
|
||||
}
|
||||
//
|
||||
$msgData = ['text' => $text];
|
||||
if ($markdown) {
|
||||
$msgData['type'] = 'md';
|
||||
}
|
||||
$result = WebSocketDialogMsg::sendMsg($action, $dialog_id, 'text', $msgData, $user->userid, false, false, $silence);
|
||||
}
|
||||
//
|
||||
$msgData = ['text' => $text];
|
||||
if ($markdown) {
|
||||
$msgData['type'] = 'md';
|
||||
}
|
||||
return WebSocketDialogMsg::sendMsg($action, $dialog_id, 'text', $msgData, $user->userid, false, false, $silence);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -258,7 +258,9 @@ class SystemController extends AbstractController
|
||||
'claude_agency',
|
||||
'wenxin_key',
|
||||
'wenxin_secret',
|
||||
'wenxin_model'
|
||||
'wenxin_model',
|
||||
'qianwen_key',
|
||||
'qianwen_model'
|
||||
];
|
||||
|
||||
if ($type == 'save') {
|
||||
@ -292,9 +294,16 @@ class SystemController extends AbstractController
|
||||
WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => "设置成功"], $botUser->userid, true, false, true);
|
||||
}
|
||||
}
|
||||
if ($backup['qianwen_key'] != $setting['qianwen_key']) {
|
||||
$botUser = User::botGetOrCreate('ai-qianwen');
|
||||
if ($botUser && $dialog = WebSocketDialog::checkUserDialog($botUser, $user->userid)) {
|
||||
WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => "设置成功"], $botUser->userid, true, false, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
//
|
||||
$setting['wenxin_model'] = $setting['wenxin_model'] ?: 'ERNIE-Bot-turbo';
|
||||
$setting['qianwen_model'] = $setting['qianwen_model'] ?: 'qwen-v1';
|
||||
if (env("SYSTEM_SETTING") == 'disabled') {
|
||||
foreach ($keys as $item) {
|
||||
if (strlen($setting[$item]) > 12) {
|
||||
|
||||
@ -1839,6 +1839,10 @@ class UsersController extends AbstractController
|
||||
* @apiGroup users
|
||||
* @apiName share__list
|
||||
*
|
||||
* @apiParam {String} [type] 分享类型:file-文件,text-列表 默认file
|
||||
* @apiParam {Number} [pid] 父级文件id,用于获取子目录和上传到指定目录的id
|
||||
* @apiParam {Number} [upload_file_id] 上传文件id
|
||||
*
|
||||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||||
* @apiSuccess {Object} data 返回数据
|
||||
@ -1846,6 +1850,7 @@ class UsersController extends AbstractController
|
||||
public function share__list()
|
||||
{
|
||||
$user = User::auth();
|
||||
$type = Request::input('type', 'file');
|
||||
$pid = intval(Request::input('pid', -1));
|
||||
$uploadFileId = intval(Request::input('upload_file_id', -1));
|
||||
// 上传文件
|
||||
@ -1857,7 +1862,7 @@ class UsersController extends AbstractController
|
||||
}
|
||||
// 获取数据
|
||||
$lists = [];
|
||||
if ($pid !== -1) {
|
||||
if ($type == 'file' && $pid !== -1) {
|
||||
$fileList = (new File)->getFileList($user, $pid, 'dir', false);
|
||||
foreach ($fileList as $file) {
|
||||
if ($file['id'] != $pid) {
|
||||
@ -1870,15 +1875,16 @@ class UsersController extends AbstractController
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
$lists[] = [
|
||||
'type' => 'children',
|
||||
'url' => Base::fillUrl("api/users/share/list") . "?pid=0",
|
||||
'icon' => url("images/file/light/folder.png"),
|
||||
'extend' => ['upload_file_id' => 0],
|
||||
'name' => Doo::translate('文件'),
|
||||
];
|
||||
if($type == 'file'){
|
||||
$lists[] = [
|
||||
'type' => 'children',
|
||||
'url' => Base::fillUrl("api/users/share/list") . "?pid=0",
|
||||
'icon' => url("images/file/light/folder.png"),
|
||||
'extend' => ['upload_file_id' => 0],
|
||||
'name' => Doo::translate('文件'),
|
||||
];
|
||||
}
|
||||
$dialogList = (new WebSocketDialog)->getDialogList($user->userid);
|
||||
foreach ($dialogList['data'] as $dialog) {
|
||||
if ($dialog['avatar']) {
|
||||
@ -1897,8 +1903,13 @@ class UsersController extends AbstractController
|
||||
'type' => 'item',
|
||||
'name' => $dialog['name'],
|
||||
'icon' => $avatar,
|
||||
'url' => Base::fillUrl("api/dialog/msg/sendfiles"),
|
||||
'extend' => ['dialog_ids' => $dialog['id']]
|
||||
'url' => $type == "file" ? Base::fillUrl("api/dialog/msg/sendfiles") : Base::fillUrl("api/dialog/msg/sendtext"),
|
||||
'extend' => [
|
||||
'dialog_ids' => $dialog['id'],
|
||||
'text_type' => 'text',
|
||||
'reply_id' => 0,
|
||||
'silence' => 'no'
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@ -55,7 +55,8 @@ class UserBot extends AbstractModel
|
||||
'approval-alert' => '审批',
|
||||
'ai-openai' => 'ChatGPT',
|
||||
'ai-claude' => 'Claude',
|
||||
'ai-wenxin' => 'Wenxin',
|
||||
'ai-wenxin' => '文心一言',
|
||||
'ai-qianwen' => '通义千问',
|
||||
'bot-manager' => '机器人管理',
|
||||
default => '', // 不是系统机器人时返回空(也可以拿来判断是否是系统机器人)
|
||||
};
|
||||
|
||||
@ -641,7 +641,7 @@ class WebSocketDialogMsg extends AbstractModel
|
||||
}
|
||||
// 其他网络图片
|
||||
$imageSaveLocal = Base::settingFind("system", "image_save_local");
|
||||
preg_match_all("/<img[^>]*?src=([\"'])(.*?\.(png|jpg|jpeg|webp|gif))\\1[^>]*?>/is", $text, $matchs);
|
||||
preg_match_all("/<img[^>]*?src=([\"'])(.*?(png|jpg|jpeg|webp|gif).*?)\\1[^>]*?>/is", $text, $matchs);
|
||||
foreach ($matchs[2] as $key => $str) {
|
||||
if ($imageSaveLocal === 'close') {
|
||||
$imageSize = getimagesize($str);
|
||||
|
||||
@ -417,6 +417,22 @@ class BotReceiveMsgTask extends AbstractTask
|
||||
$error = 'The client version is low (required version ≥ v0.29.12).';
|
||||
}
|
||||
break;
|
||||
// QianWen 机器人
|
||||
case 'ai-qianwen@bot.system':
|
||||
$setting = Base::setting('aibotSetting');
|
||||
$webhookUrl = "{$serverUrl}/ai/qianwen/send";
|
||||
$extras = [
|
||||
'qianwen_key' => $setting['qianwen_key'],
|
||||
'qianwen_model' => $setting['qianwen_model'],
|
||||
'server_url' => $serverUrl,
|
||||
];
|
||||
if (empty($extras['qianwen_key'])) {
|
||||
$error = 'Robot disabled.';
|
||||
} elseif (in_array($this->client['platform'], ['win', 'mac', 'web'])
|
||||
&& !Base::judgeClientVersion("0.29.11", $this->client['version'])) {
|
||||
$error = 'The client version is low (required version ≥ v0.29.12).';
|
||||
}
|
||||
break;
|
||||
// 其他机器人
|
||||
default:
|
||||
$userBot = UserBot::whereBotId($botUser->userid)->first();
|
||||
|
||||
BIN
public/images/emoticon/08/1001-666.gif
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
public/images/emoticon/08/1002-bixin.gif
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
public/images/emoticon/08/1003-enen.gif
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
public/images/emoticon/08/1004-hahaha.gif
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/images/emoticon/08/1005-hehe.gif
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
public/images/emoticon/08/1006-huahua.gif
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
public/images/emoticon/08/1007-ok.gif
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/images/emoticon/08/1008-wenhao.gif
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
public/images/emoticon/08/1009-xiaozheliulei.gif
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
public/images/emoticon/08/1010-xiexielaoban.gif
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
public/images/emoticon/08/1011-zan.gif
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
public/images/emoticon/08/1012-chigua.gif
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
public/images/emoticon/08/1013-kuaichiyao.gif
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
public/images/emoticon/08/1014-keai.gif
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
public/images/emoticon/08/1015-gun.gif
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
public/images/emoticon/08/1016-haixiu.gif
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
public/images/emoticon/08/1017-yongbao.gif
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
public/images/emoticon/08/1018-wofangle.gif
Normal file
|
After Width: | Height: | Size: 92 KiB |
BIN
public/images/emoticon/08/1019-tuxue.gif
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
public/images/emoticon/08/1020-guaiqiao.gif
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
public/images/emoticon/08/1021-110.gif
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
public/images/emoticon/08/1022-lengmo.gif
Normal file
|
After Width: | Height: | Size: 72 KiB |
BIN
public/images/emoticon/08/1023-wanan.gif
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
public/images/emoticon/08/1024-laiba.gif
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
public/images/emoticon/08/icon.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
public/images/emoticon/09/2001-GuZhang.gif
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
public/images/emoticon/09/2002-ChongYa.gif
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
public/images/emoticon/09/2003-QiDai.gif
Normal file
|
After Width: | Height: | Size: 77 KiB |
BIN
public/images/emoticon/09/2004-HuanHu.gif
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
public/images/emoticon/09/2005-KuQi.gif
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
public/images/emoticon/09/2006-GanMa.gif
Normal file
|
After Width: | Height: | Size: 92 KiB |
BIN
public/images/emoticon/09/2007-EnEn.gif
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
public/images/emoticon/09/2008-BiXin.gif
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
public/images/emoticon/09/2009-YiWen.gif
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
public/images/emoticon/09/2010-SongXiaoHua.gif
Normal file
|
After Width: | Height: | Size: 92 KiB |
BIN
public/images/emoticon/09/2011-YaoBai.gif
Normal file
|
After Width: | Height: | Size: 95 KiB |
BIN
public/images/emoticon/09/2012-TiaoYue.gif
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
public/images/emoticon/09/2013-NiZou.gif
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
public/images/emoticon/09/2014-WuZu.gif
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
public/images/emoticon/09/2015-HaHaHa.gif
Normal file
|
After Width: | Height: | Size: 94 KiB |
BIN
public/images/emoticon/09/2016-WuYu.gif
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
public/images/emoticon/09/2017-JiaYi.gif
Normal file
|
After Width: | Height: | Size: 75 KiB |
BIN
public/images/emoticon/09/2018-NieLian.gif
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
public/images/emoticon/09/2019-TieTie.gif
Normal file
|
After Width: | Height: | Size: 96 KiB |
BIN
public/images/emoticon/09/2020-HaoMeng.gif
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
public/images/emoticon/09/2021-AiXin.gif
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
public/images/emoticon/09/2022-MaiMaiMai.gif
Normal file
|
After Width: | Height: | Size: 96 KiB |
BIN
public/images/emoticon/09/icon.png
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
BIN
public/images/emoticon/10/3001-bengda.gif
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
public/images/emoticon/10/3002-bixin.gif
Normal file
|
After Width: | Height: | Size: 96 KiB |
BIN
public/images/emoticon/10/3003-chonga.gif
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
public/images/emoticon/10/3004-dawoya.gif
Normal file
|
After Width: | Height: | Size: 61 KiB |
BIN
public/images/emoticon/10/3005-enen.gif
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
public/images/emoticon/10/3006-halou.gif
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
public/images/emoticon/10/3007-heihei.gif
Normal file
|
After Width: | Height: | Size: 97 KiB |
BIN
public/images/emoticon/10/3008-huaixiao.gif
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
public/images/emoticon/10/3009-huanhu.gif
Normal file
|
After Width: | Height: | Size: 94 KiB |
BIN
public/images/emoticon/10/3010-kanrenao.gif
Normal file
|
After Width: | Height: | Size: 97 KiB |
BIN
public/images/emoticon/10/3011-kun.gif
Normal file
|
After Width: | Height: | Size: 81 KiB |
BIN
public/images/emoticon/10/3012-laiya.gif
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
public/images/emoticon/10/3013-toukan.gif
Normal file
|
After Width: | Height: | Size: 99 KiB |
BIN
public/images/emoticon/10/3014-zan.gif
Normal file
|
After Width: | Height: | Size: 96 KiB |
BIN
public/images/emoticon/10/3015-zhenjing.gif
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
public/images/emoticon/10/icon.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
public/images/emoticon/11/4001-FaDou.gif
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
public/images/emoticon/11/4002-Wa.gif
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
public/images/emoticon/11/4003-Qiong.gif
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
public/images/emoticon/11/4004-OK.gif
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/images/emoticon/11/4005-HaoDe.gif
Normal file
|
After Width: | Height: | Size: 87 KiB |
BIN
public/images/emoticon/11/4006-GanDaoYaLi.gif
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/images/emoticon/11/4007-XieXie.gif
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
public/images/emoticon/11/4008-XinNiGeGui.gif
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
public/images/emoticon/11/4009-LaiLe.gif
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
public/images/emoticon/11/4010-KaixXin.gif
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
public/images/emoticon/11/4011-EMO.gif
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
BIN
public/images/emoticon/11/4012-WoBuTing.gif
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
public/images/emoticon/11/4013-YiWen.gif
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
public/images/emoticon/11/4014-NO.gif
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
public/images/emoticon/11/4015-DaRaoLe.gif
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
public/images/emoticon/11/4016-GuZhang.gif
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
public/images/emoticon/11/4017-XingBa.gif
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
public/images/emoticon/11/4018-ChouJu.gif
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
public/images/emoticon/11/icon.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
public/images/emoticon/12/5001-bendan.gif
Normal file
|
After Width: | Height: | Size: 86 KiB |
BIN
public/images/emoticon/12/5002-buhuole.gif
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
public/images/emoticon/12/5003-chi.gif
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
public/images/emoticon/12/5004-hahaha.gif
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
public/images/emoticon/12/5005-haobang.gif
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
public/images/emoticon/12/5006-haode.gif
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
public/images/emoticon/12/5007-nanguo.gif
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
public/images/emoticon/12/5008-wa.gif
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
public/images/emoticon/12/5009-weiguan.gif
Normal file
|
After Width: | Height: | Size: 95 KiB |
BIN
public/images/emoticon/12/5010-wocuole.gif
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
public/images/emoticon/12/5011-xiaoku.gif
Normal file
|
After Width: | Height: | Size: 37 KiB |