| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- // 若使用 IM 能力则引入
- import NIM from 'nim-web-sdk-ng';
- import http from './http';
- import store from '../store';
- var data = {};
- const images = [
- 'https://cdn.raex.vip/nft/2022-12-15-15-53-11SalztwsE.jpg',
- 'https://cdn.raex.vip/nft/2022-12-14-16-26-04uDhOZUZG.jpg',
- 'https://cdn.raex.vip/nft/2022-11-30-14-05-53IvdKPUqD.jpg',
- 'https://cdn.raex.vip/nft/僵尸/U/bj01_zt01_bq01_yf06_ts02_ls02_ss10_hk01.png',
- 'https://cdn.raex.vip/thumb_image/2022-06-17-22-27-50ABPKthLW.jpg',
- 'https://cdn.raex.vip/thumb_image/2022-12-06-14-21-19xesksFXt.jpg',
- 'https://cdn.raex.vip/nft/PFA1/bj51_t26_yf71_ts46_es13_ys9_qt7_z4.png',
- 'https://cdn.raex.vip/user/undefined/2022-11-09-15-40-15Cocfjrgz.png',
- 'https://cdn.raex.vip/image/2022-10-12-14-52-19IDjxOfox.jpg',
- 'https://cdn.raex.vip/image/2022-10-12-14-53-04eGNedNUK.jpg'
- ];
- //msg
- // scene: 消息场景
- // from: 消息发送方, 帐号或群id
- // fromNick: 消息发送方的昵称
- // fromClientType: 发送方的设备类型
- // fromDeviceId: 发送端设备id
- // to: 消息接收方, 帐号或群id
- // time: 时间戳
- // type: 消息类型
- // sessionId: 消息所属的会话对象的ID
- // target: 聊天对象, 账号或者群id
- // flow: 消息的流向
- // 'in'表示此消息是收到的消息
- // 'out'表示此消息是发出的消息
- // status: 消息发送状态
- // 'sending' 发送中
- // 'success' 发送成功
- // 'fail' 发送失败
- // text: 文本消息的文本内容, 请参考发送文本消息
- // file: 文件消息的文件对象, 具体字段请参考图片对象、音频对象、视频对象、文件对象, 请参考发送文件消息
- // geo: 地理位置消息的地理位置对象, 请参考发送地理位置消息
- // tip: 提醒消息的内容, 请参考发送提醒消息
- // content: 自定义消息的消息内容, 开发者可以自行扩展, 建议封装成JSON格式字符串, 请参考发送自定义消息
- // attach: 群通知消息的附加信息, 参考群通知消息来查看不同类型的群通知消息对应的附加信息
- // idClient: SDK生成的消息id, 在发送消息之后会返回给开发者, 开发者可以在发送消息的回调里面根据这个ID来判断相应消息的发送状态, 到底是发送成功了还是发送失败了, 然后根据此状态来更新页面的UI。如果发送失败, 那么可以重发消息
- // idServer: 服务器用于区分消息用的ID, 主要用于获取云端历史记录
- // isMuted: 该消息在接收方是否应该被静音
- // isInBlackList: 发送此条消息时,发送方'from'是否在接收方'to'的黑名单列表中
- // resend: 是否是重发的消息
- // custom: 扩展字段
- // 推荐使用JSON格式构建, 非JSON格式的话, Web端会正常接收, 但是会被其它端丢弃
- // nosScene nos存储场景, 适用于发送文件消息, 默认初始化配置
- // nosSurvivalTime nos存储场景有效时间, 适用于发送文件消息,默认初始化配置
- // pushContent: 自定义推送文案
- // pushPayload: 自定义的推送属性
- // 推荐使用JSON格式构建, 非JSON格式的话, Web端会正常接收, 但是会被其它端丢弃
- // needPushNick: 是否需要推送昵称
- // apns: 特殊推送选项, 只在群会话中使用
- // apns.accounts: 需要特殊推送的账号列表, 此字段不存在的话表示推送给当前会话内的所有用户
- // apns.content: 需要特殊推送的文案
- // apns.forcePush: 是否强制推送, true 表示即使推送列表中的用户屏蔽了当前会话(如静音), 仍能够推送当前这条内容给相应用户
- // localCustom: 本地自定义扩展字段
- // 在支持数据库时可以调用更新本地消息来更新此字段, 此字段只会被更新到本地数据库, 不会被更新到服务器上
- // needMsgReceipt: 是否需要业务已读(包含该字段即表示需要),只有设置了业务已读,才可以调用getTeamMsgReads,getTeamMsgReadAccounts等相关方法
- // isHistoryable: 是否存储云端历史
- // isRoamingable: 是否支持漫游
- // isSyncable: 是否支持发送者多端同步
- // cc: 是否支持抄送
- // isPushable: 是否需要推送
- // isOfflinable: 是否要存离线
- // isUnreadable: 是否计入消息未读数
- // isLocal: 是否是本地消息, 请查阅发送本地消息
- // yidunAntiSpamRes: 易盾反垃圾返回的结果。当开启易盾反垃圾服务,并且匹配消息体命中到易盾的反垃圾规则,会返回此结果。
- var nim = null;
- var avatars = {};
- // teamId='7748093008'
- function initChat() {
- console.log('34664');
- http.http
- .get('/neteaseUser/get/' + store.state.userInfo.id)
- .then(res => {
- return Promise.resolve(res);
- })
- .catch(() => {
- return http.http.post('/neteaseUser/create?userId=' + store.state.userInfo.id);
- })
- .then(res => {
- store.commit('setNeteaseUser', res);
- nim = new NIM({
- debugLevel: 'debug', // 是否开启日志,将其打印到console。集成开发阶段建议打开。
- appkey: '872dd9d0a0f8eda25b579654745db459',
- account: store.state.userInfo.id, //账号
- token: res.token,
- db: true //若不要开启数据库请设置false。SDK默认为true。
- });
- avatars[store.state.userInfo.id] = store.state.userInfo.avatar;
- nim.connect().then(() => {
- getTeams();
- getSession();
- });
- nim.on('msg', onMsg);
- });
- }
- async function getTeams() {
- const teams = await nim.team.getTeams();
- console.log(teams);
- }
- //获取群消息
- async function getTeam(teamId) {
- const teamInfo = await nim.team.getTeamInfo({
- teamId: teamId
- });
- return teamInfo;
- }
- async function getHistroy(teamId) {
- return await nim.msgLog.getHistoryMsgs({
- scene: 'team',
- to: teamId,
- reverse: false,
- asc: true
- });
- }
- async function getSession() {
- const sessions = await nim.session.getSessions({
- limit: 10,
- desc: true
- });
- console.log(sessions);
- }
- async function onMsg(msg) {
- console.log('Receive msg: ', msg);
- await nim.msg.sendMsgReceipt({
- msg: msg
- });
- }
- async function sendMsg(msg = '', toTeamId, onSendBefore, type = 'Text', scene = 'team') {
- if (type === 'Text') {
- await nim.msg.sendTextMsg({
- scene: scene,
- to: toTeamId,
- body: msg,
- onSendBefore: msg => {
- onSendBefore(msg);
- }
- });
- } else {
- await nim.msg.sendImageMsg({
- scene: scene,
- to: toTeamId,
- file: msg,
- onUploadStart: function (task) {
- console.log('Upload start!', task);
- },
- onUploadProgress: function (progress) {
- console.log('Uploading!', progress);
- },
- onUploadDone: function (file) {
- console.log('Upload done!', file);
- },
- onSendBefore: function (msg) {
- onSendBefore(msg);
- }
- });
- }
- }
- function getPushMsg(msgs, oldMsgs = []) {
- if (!Array.isArray(msgs)) {
- msgs = [msgs];
- }
- if (!msgs) {
- return oldMsgs;
- }
- if (!msgs.length) {
- return oldMsgs;
- }
- let _back = [...msgs, ...oldMsgs].sort((a, b) => {
- return a.time - b.time;
- });
- _back = _back.map(item => {
- return {
- ...item,
- fromIcon: getAvatar(item.from)
- };
- });
- console.log(_back);
- return _back;
- }
- function getAvatar(account) {
- if (!avatars[account]) {
- avatars[account] = images[Math.floor(Math.random() * 10)];
- }
- return avatars[account];
- }
- export { nim, initChat, getTeam, getHistroy, sendMsg, getPushMsg };
|