用uniapp 及socket.io做一个简单聊天app 踢人拉黑 7

发布于:2024-08-08 ⋅ 阅读:(87) ⋅ 点赞:(0)

在聊天群里,以及私聊时,可以点对方头象弹出踢跟拉黑,踢只是让对方退出聊天室。拉黑是记对方退出且不能再进入。

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: '退出出错' });
  }
});