mkdir voidscream_chat cd voidscream_chat python -m venv venv source venv/bin/activate # Linux/Mac venv\Scripts\activate # Windows pip install flask flask-socketio
from flask import Flask, render_template, request, session from flask_socketio import SocketIO, join_room, emit import random from datetime import datetime
app = Flask(name) app.config["SECRET_KEY"] = "voidscream_1337" # Keep it secret, keep it safe socketio = SocketIO(app)
users = {} # {sid: nickname} messages = [] # List of {nickname, message, timestamp}
VOID_COLORS = ['#ff00ff', '#00ff00', '#ff0000', '#00ffff', '#ffff00']
@app.route('/') def index(): return render_template('index.html')
@socketio.on('connect') def handle_connect(): # Assign a random anon ID if none exists if 'nickname' not in session: session['nickname'] = f"Anon_{random.randint(1000, 9999)}" users[request.sid] = session['nickname'] emit('welcome', {'message': f"{session['nickname']} joined the void!", 'color': random.choice(VOID_COLORS)}, broadcast=True) # TODO: Send chat history to new user (last 50 messages)
@socketio.on('message') def handle_message(data): message = data['message'] if len(message) > 280: # Void’s got limits return timestamp = datetime.now().strftime('%H:%M:%S') msg_data = { 'nickname': users[request.sid], 'message': message, 'timestamp': timestamp, 'color': random.choice(VOID_COLORS) } messages.append(msg_data) emit('new_message', msg_data, broadcast=True) # TODO: Add message filtering (e.g., block spam or slurs)
@socketio.on('disconnect') def handle_disconnect(): nickname = users.get(request.sid, 'Anon') del users[request.sid] emit('leave', {'message': f"{nickname} fled the void!", 'color': '#ff0000'}, broadcast=True) # TODO: Log disconnects to a file for void analytics
if name == "main": socketio.run(app, host='0.0.0.0', port=5000, debug=True) # TODO: Add CLI args for custom host/port (e.g., python main.py --host 127.0.0.1 --port 8080) e7e77506e7dbff91791024cb847913aab5575d8c
<title>##Voidscream</title> <style> body { background: #000; color: #0f0; font-family: 'Courier New', monospace; margin: 0; padding: 20px; } #chat-container { max-width: 800px; margin: auto; border: 2px solid #ff00ff; padding: 20px; background: rgba(0, 0, 0, 0.9); } #messages { height: 500px; overflow-y: auto; margin-bottom: 20px; border: 1px solid #00ffff; } .message { margin: 10px; animation: glitch 1s infinite; } @keyframes glitch { 0% { transform: translate(0); } 20% { transform: translate(-2px, 2px); } 40% { transform: translate(2px, -2px); } 60% { transform: translate(-2px, 2px); } 80% { transform: translate(2px, -2px); } 100% { transform: translate(0); } } #input-form { display: flex; } #message-input { flex-grow: 1; background: #111; color: #0f0; border: 1px solid #ff00ff; padding: 10px; } #send-btn { background: #ff00ff; color: #000; border: none; padding: 10px; cursor: pointer; } #send-btn:hover { background: #00ffff; } </style> <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.5.0/socket.io.js"></script> <script> const socket = io(); const messagesDiv = document.getElementById('messages'); const inputForm = document.getElementById('input-form'); const messageInput = document.getElementById('message-input'); socket.on('welcome', (data) => {
addMessage(data.message, data.color);
});
socket.on('new_message', (data) => {
addMessage(`${data.nickname} [${data.timestamp}]: ${data.message}`, data.color);
});
socket.on('leave', (data) => {
addMessage(data.message, data.color);
});
function addMessage(message, color) {
const msg = document.createElement('div');
msg.className = 'message';
msg.style.color = color;
msg.textContent = message;
messagesDiv.appendChild(msg);
messagesDiv.scrollTop = messagesDiv.scrollHeight;
}
inputForm.addEventListener('submit', (e) => {
e.preventDefault();
const message = messageInput.value.trim();
if (message) {
socket.emit('message', { message });
messageInput.value = '';
}
});
// TODO: Add glitch effect on message hover
// TODO: Add nickname change functionality
// TODO: Handle connection errors with a retry mechanism
</script>
socketio = SocketIO(app)
@socketio.on('start_scan') def handle_scan(data): query = data.get('query', '##Voidscream') posts = client.search_recent_tweets(query=query, max_results=10) for post in posts.data: analysis = analyze_text(post.text) if analysis['is_lone_wolf']: socketio.emit('new_lone_wolf', { 'username': post.author_id, 'text': post.text, 'keywords': analysis['keywords'], 'sentiment': analysis['sentiment'] }) socketio.sleep(1) # Simulate streaming # TODO: Add background thread for continuous scanning