new post sends chat message

This commit is contained in:
iou1name 2018-10-08 10:22:36 -04:00
parent 5f5591736f
commit 377f20439e
8 changed files with 81 additions and 4 deletions

View File

@ -25,6 +25,7 @@ titivillus=# \q
2. Walk the dinosaur 2. Walk the dinosaur
3. Set `STATIC_ROOT` under `settings.py` appropriately 3. Set `STATIC_ROOT` under `settings.py` appropriately
4. Run `python manage.py collectstatic` 4. Run `python manage.py collectstatic`
5. Create \[super\]user named `Server` and set id in settings.py
## Usage ## Usage
`gunicorn -b localhost:5100 -e SCRIPT_NAME=/titivillus titivillus.wsgi` `gunicorn -b localhost:5100 -e SCRIPT_NAME=/titivillus titivillus.wsgi`

View File

@ -11,6 +11,7 @@ import types
import random import random
import bleach import bleach
from django.conf import settings
from django.db import IntegrityError from django.db import IntegrityError
from django.utils.timezone import localtime from django.utils.timezone import localtime
from django.urls import reverse from django.urls import reverse
@ -18,6 +19,7 @@ from django.urls import reverse
from quest.models import * from quest.models import *
from quest.tools import handle_img from quest.tools import handle_img
from quest.forms import DiceCallForm, PollForm from quest.forms import DiceCallForm, PollForm
from user.models import User
def message(socket, data): def message(socket, data):
""" """
@ -172,6 +174,21 @@ def text_post(socket, data):
data['post_id'] = p.id data['post_id'] = p.id
socket.send('new_post', data) socket.send('new_post', data)
server = User.objects.get(id=settings.SERVER_USER_ID)
m = Message(
quest=quest,
user=server,
message=f"{quest.owner.username} made a new post!",
)
m.save()
data = {}
data['message_id'] = m.id
data['message'] = m.message
data['date'] = int(time.time())
data['name'] = server.username
data['anonymize'] = False
socket.send('message', data)
def dice_post(socket, data): def dice_post(socket, data):
""" """
@ -226,6 +243,21 @@ def dice_post(socket, data):
data['date'] = localtime(p.timestamp).strftime('%Y-%m-%d %H:%M') data['date'] = localtime(p.timestamp).strftime('%Y-%m-%d %H:%M')
socket.send('new_post', data) socket.send('new_post', data)
server = User.objects.get(id=settings.SERVER_USER_ID)
m = Message(
quest=quest,
user=server,
message=f"{quest.owner.username} made a new dice call!",
)
m.save()
data = {}
data['message_id'] = m.id
data['message'] = m.message
data['date'] = int(time.time())
data['name'] = server.username
data['anonymize'] = False
socket.send('message', data)
def poll_post(socket, data): def poll_post(socket, data):
""" """
@ -269,6 +301,21 @@ def poll_post(socket, data):
data['options'] = [(o.id, o.text) for o in options] data['options'] = [(o.id, o.text) for o in options]
socket.send('new_post', data) socket.send('new_post', data)
server = User.objects.get(id=settings.SERVER_USER_ID)
m = Message(
quest=quest,
user=server,
message=f"{quest.owner.username} made a new poll!",
)
m.save()
data = {}
data['message_id'] = m.id
data['message'] = m.message
data['date'] = int(time.time())
data['name'] = server.username
data['anonymize'] = False
socket.send('message', data)
def edit_post(socket, data): def edit_post(socket, data):
""" """
@ -454,6 +501,21 @@ def new_page(socket, data):
data['url'] = reverse('quest:quest', args=[socket.quest_id, p.page_num]) data['url'] = reverse('quest:quest', args=[socket.quest_id, p.page_num])
socket.send('new_page', data) socket.send('new_page', data)
server = User.objects.get(id=settings.SERVER_USER_ID)
m = Message(
quest=quest,
user=server,
message=f"{quest.owner.username} started a new page!",
)
m.save()
data = {}
data['message_id'] = m.id
data['message'] = m.message
data['date'] = int(time.time())
data['name'] = server.username
data['anonymize'] = False
socket.send('message', data)
events = {} events = {}
for obj in dir(): for obj in dir():

View File

@ -5,10 +5,11 @@
{% for message in chat_messages %} {% for message in chat_messages %}
<div id="msg-{{ message.id }}" class="message"> <div id="msg-{{ message.id }}" class="message">
<div class="messageHeader"> <div class="messageHeader">
<span class="messageName">{% if quest.owner.username == message.user.username or not quest.anonymize %}{{ message.user.username or quest.anon_name }}{% else %}{{ quest.anon_name }}{% endif %}</span> <span class="messageName">{% if quest.owner == message.user or message.user.id == server_user_id or not quest.anonymize %}{{ message.user.username or quest.anon_name }}{% else %}{{ quest.anon_name }}{% endif %}</span>
<span class="messageDate">{{ localtime(message.timestamp).strftime('%Y-%m-%d %H:%M:%S') }}</span> <span class="messageDate">{{ localtime(message.timestamp).strftime('%Y-%m-%d %H:%M:%S') }}</span>
<span class="messageID">No.<a href="javascript:quote('{{ message.id }}')">{{ message.id }}</a></span> <span class="messageID">No.<a href="javascript:quote('{{ message.id }}')">{{ message.id }}</a></span>
</div> </div>
<hr class="msgHeaderHr">
<div class="messageContent">{{ message.message }}</div> <div class="messageContent">{{ message.message }}</div>
</div> </div>
<hr> <hr>

View File

@ -142,8 +142,17 @@ h3 {
width: 100%; width: 100%;
} }
.msgHeaderHr {
margin-top: 0.2em;
margin-bottom: 0.2em;
margin-left: auto;
margin-right: auto;
border: 0;
border-bottom: 1px solid #ccc;
}
.msgSrvHr { .msgSrvHr {
width: 95%; width: 50%;
margin-top: 0.2em; margin-top: 0.2em;
margin-bottom: 0.2em; margin-bottom: 0.2em;
margin-left: auto; margin-left: auto;

View File

@ -52,7 +52,7 @@ socket.events['message'] = function(data) {
let msg_str = '<div id="message-' + data.message_id + '" class="message">'; let msg_str = '<div id="message-' + data.message_id + '" class="message">';
msg_str = '<div class="messageHeader"><span class="messageName">' + ((data.name && !data.anonymize) ? data.name : anon_name) + '</span> '; msg_str = '<div class="messageHeader"><span class="messageName">' + ((data.name && !data.anonymize) ? data.name : anon_name) + '</span> ';
msg_str += '<span class="messageDate">' + strftime(data.date) + '</span> '; msg_str += '<span class="messageDate">' + strftime(data.date) + '</span> ';
msg_str += '<span class="messageID">No.<a href="javascript:quote(' + data.message_id + ')">' + data.message_id + '</a></span></div>'; msg_str += '<span class="messageID">No.<a href="javascript:quote(' + data.message_id + ')">' + data.message_id + '</a></span><hr class="msgHeaderHr"></div>';
msg_str += '<div class="messageContent">' + data.message + '</div></div><hr>'; msg_str += '<div class="messageContent">' + data.message + '</div></div><hr>';
let mbox = document.getElementById('chatWindow'); let mbox = document.getElementById('chatWindow');

View File

@ -9,6 +9,7 @@ from django.views.decorators.http import require_POST
from django.contrib import messages from django.contrib import messages
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from django.db.models import F from django.db.models import F
from django.conf import settings
from .models import Quest, DiceRoll, PollOption, PollVote, Page, Post from .models import Quest, DiceRoll, PollOption, PollVote, Page, Post
from .forms import EditQuestForm, QuestForm, PostForm from .forms import EditQuestForm, QuestForm, PostForm
@ -70,6 +71,7 @@ def quest(request, quest_id, page_num='0'):
poll_options = PollOption.objects.filter(poll__post__quest=quest) poll_options = PollOption.objects.filter(poll__post__quest=quest)
poll_votes = PollVote.objects.filter(option__poll__post__quest=quest) poll_votes = PollVote.objects.filter(option__poll__post__quest=quest)
ip_address = request.META['REMOTE_ADDR'] ip_address = request.META['REMOTE_ADDR']
server_user_id = settings.SERVER_USER_ID
context = locals() context = locals()
if page_num == '0': if page_num == '0':
return render(request, 'quest/quest_homepage.html', context) return render(request, 'quest/quest_homepage.html', context)

View File

@ -163,3 +163,6 @@ IMG_SVR_URL = "https://img.steelbea.me/"
# Taggit # Taggit
TAGGIT_CASE_INSENSITIVE = True TAGGIT_CASE_INSENSITIVE = True
# Server user id
SERVER_USER_ID = 3

1
todo
View File

@ -11,7 +11,6 @@ Quote backlinks
Improvements: Improvements:
More options for text posts (lists and so on) More options for text posts (lists and so on)
More rigorous input checking in events.py More rigorous input checking in events.py
New post displays chat message
Poll vote highlights entire option Poll vote highlights entire option
Total voters per poll Total voters per poll
Chat archives Chat archives