在聊天群里,以及私聊时,可以点对方头象弹出踢跟拉黑,踢只是让对方退出聊天室。拉黑是记对方退出且不能再进入。
socket.io 中的踢人流程:
将用户从groupUsers 删除,表现在uniapp的界面,就是通知friends页,你这孙子被踢了。只是提示。但还能进去。但是如果是被黑,则是你被踢且删除。这时要求界面进行重新的绑定。将这一个群或将私聊删掉。
const groups = {}; // 存储用户与群组的映射
const kickedUsers = {}; // 存储被踢出用户的信息
const groupUsers = {}; // 存储每个群组中的用户列表
socket.on('kickUser', ({ groupName, userName }) => {
for (let id in groups) {
if (groups[id].userName === userName && groups[id].groupName === groupName) {
io.sockets.sockets.get(id).leave(groupName);
io.to(groupName).emit('message', `${userName} 已被踢出群组`);
// 从用户列表中删除
if (groupUsers[groupName]) {
groupUsers[groupName] = groupUsers[groupName].filter(user => user !== userName);
io.to(groupName).emit('userList', groupUsers[groupName]);
}
console.log(`${userName} 被踢出群组 ${groupName}`);
if (!kickedUsers[groupName]) {
kickedUsers[groupName] = [];
}
kickedUsers[groupName].push(userName);
break;
}
}
});
再加入一个退群功能:
app.get('/leavgroup', authenticateToken, async (req, res) => {
try {
const userId = req.user.id;
let { groupid: group_id } = req.query;
await Friend.destroy({ where: {user_id:userId, group_friend_id:group_id,type:'group' } });
return res.json({ code:0, message: '退出成功' });
} catch (error) {
console.log(error)
return res.json({ code:1, message: '退出出错' });
}
});
拉黑的接口:
app.get('/black', authenticateToken, async (req, res) => {
try {
const userId = req.user.id;
let { group_id,name } = req.query;
let user = await User.findOne({ where: { username:name } });
if(user){
let user_id = user.id;
if(userId==user_id){
return res.json({ code:1, message: '不能拉黑自己' });
}
if(group_id>0){
await Friend.destroy({ where: {user_id:user_id, group_friend_id:group_id,type:'user_id' } });
await Invite.destroy({ where: {inviter_id:userId, invitee_id:user_id } });
return res.json({ code:0, message: '拉黑成功' });
}else{
//删除所有的记录
await Friend.destroy({ where: {user_id:user_id, group_friend_id:userId,type:'user' } });
await Friend.destroy({ where: {user_id:userId , group_friend_id:user_id,type:'user' } });
await Invite.destroy({ where: {inviter_id:user_id, invitee_id:userId,group_id } });
await Invite.destroy({ where: {inviter_id:userId, invitee_id:user_id ,group_id } });
}
}
return res.json({ code:0, message: '退出成功' });
} catch (error) {
console.log(error)
return res.json({ code:1, message: '退出出错' });
}
});