как реализовать чат с админом django-channels
Всем привет! Хочу реализовть 'обратную связь' в виде чата. Подключил django-channels, но возникла проблема разграничения достпупа - если отправлять личное сообщение админам, то оно дублируется у пользователя так как используется цикл отправки сообщения- ничего более умного я не придумал
def receive(self, text_data=None, bytes_data=None):
text_data_json = json.loads(text_data)
message = text_data_json['message']
print(text_data_json)
if not self.user.is_authenticated:
return
target_msg = message
# send private message to the target
async_to_sync(self.channel_layer.group_send)(
**f'inbox_{помогите}',**
{
'type': 'private_message',
'user': self.user.username,
'message': target_msg,
}
)
# send private message delivered to the user
self.send(json.dumps({
'type': 'private_message_delivered',
'user': self.user.username,
'target': **{помогите}**
'message': target_msg,
}))
Жирным выделил то, куда нужно вставить логику разграничения.
вместо '{поиогите}' должны быть админы, но так , что бы пользователю не транслировалась отправка сообщений по количеству админов,а только одно Навсякий случай скину JS
chatSocket.onmessage = function (event) {
const data = JSON.parse(event.data);
console.log(data)
switch (data.type) {
case "private_message":
let now = new Date();
myDiv.appendChild(myDivMess = document.createElement('div'))
myDivMess.className += 'message'
myDivMess.appendChild(myName = document.createElement('div'))
myName.textContent += data.user + '\n';
myDivMess.appendChild(myMessage = document.createElement('div'))
myMessage.textContent += data.message
myDivMess.appendChild(myDate = document.createElement('div'))
myDate.className += 'date'
myDate.textContent += data.time
myDiv.scrollTop = myDiv.scrollHeight
chatMessageInput.focus();
break;
case "user_join":
myDiv.appendChild(myDivMess = document.createElement('div'))
myDivMess.className = 'joinedTheRoom'
myDivMess.textContent += data.user + " joined the room.\n";
myDiv.scrollTop = myDiv.scrollHeight
break;
case "user_leave":
myDiv.appendChild(myDivMess = document.createElement('div'))
myDivMess.className = 'joinedTheRoom'
myDivMess.textContent += data.user + " left the room.\n";
break;
// case "private_message":
// chatLog.textContent += "private_message from " + data.user + ": " + data.message + "\n";
// break;
case "private_message_delivered":
myDiv.appendChild(myDivMess = document.createElement('div'))
myDivMess.className += 'message'
myDivMess.appendChild( myName = document.createElement('div'))
myName.textContent += data.user + '\n';
myDivMess.appendChild( myMessage = document.createElement('div'))
myMessage.textContent += "private_message to" + data.message
myDivMess.appendChild( myDate = document.createElement('div'))
myDate.className += 'date'
myDate.textContent += data.time
myDiv.appendChild(myDivMess = document.createElement('div'))
break;