We need some sort of wordle bot for the ranking system.
I should give attempts, but also mention the all green bonus, and aesthetically pleasing symmetrical shapes.
Who can automate this lol
#wordle
We need some sort of wordle bot for the ranking system.
I should give attempts, but also mention the all green bonus, and aesthetically pleasing symmetrical shapes.
Who can automate this lol
#wordle
nostr:npub1jss47s4fvv6usl7tn6yp5zamv2u60923ncgfea0e6thkza5p7c3q0afmzy made a nostr one, which I'm guilty of not migrating to, yet. Schelling point, inertia, etc is a b
Yeah but can he make a ranking bot for the league lol.
I like the idea. But wordle also something i have with people I know irl (no, they would never bother using nostr lol).
The alt is also using previous wordle words, so I suspect it's easier due to morphic resonance ;)
I wish word5 just stole the nyt word. I don't like doing both, and I wanna stay competitive with "normies".
Met a guy at Xmas party who did wordle. He boasted a 2 that day. Older guy, he was proud and I was impressed. Word was quilt. I introduced him to hard mode, to steal some of his thunder
Hahahaha
Ah, 2 guesses impressive. I see you're using Journalist Easy Mode tho
nostr:nprofile1qqsr7acdvhf6we9fch94qwhpy0nza36e3tgrtkpku25ppuu80f69kfqppemhxue69uhkummn9ekx7mp0qyghwumn8ghj7mn0wd68ytnhd9hx2tcpzamhxue69uhhyetvv9ujumn0wd68ytnzv9hxgtcmuvweu nostr:nprofile1qqsqgc0uhmxycvm5gwvn944c7yfxnnxm0nyh8tt62zhrvtd3xkj8fhgpzamhxue69uhhyetvv9ujuurjd9kkzmpwdejhgtcpzemhxue69uhhyetvv9ujuerfw36x7tnsw43z7qgkwaehxw309aex2mrp0yhx6mmnw3ezuur4vghs0klf00 can one of you guys make us a wordle daily ranking bot thing please? You have that Shakespeare thing and the know how. At least 5 people will appreciate it. That's like 25% of nostr.
Thank you.
Merry Christmas 🎁🎄
15k sats from me, for any sort of leaderboard thing. nostr:npub1jss47s4fvv6usl7tn6yp5zamv2u60923ncgfea0e6thkza5p7c3q0afmzy prob best suited to make it a reality. Plus Alex is very busy lately
He is not busy with anything as important as a wordle bot tho. No chance. 😼
I intend to do this just after Christmas.
I committed to 25 games in 25 days (https://advent.otherstuff.ai) so have to finish that first. then I'll revisit the ones that worked and improve them.
Word5 was the most popular so I figured I"d add social follows, leader boards etc when I get a minute.
Unlikely to prioritise it over Christmas in the pool with the kids though 😝
Awesome! I'm patient, so no pressure. Impressive speed you're moving at. I'll keep some zaps on the ready 🙏
I don't know what wordle is 🤓 It annoyed me when it came out because Twitter was flooded with it so I muted the word. I legit know nothing about it. I assume it's some word game. That's where my knowledge ends. If I see those blocks here I instinctively scroll past. Should I mute it here too? 😬
Lol, it's quite a fun word game from NYT. Maybe you're not the right person to ask lol
This would be correct. I'm sorry 🤣
I've always disliked you, DRoss. Good day!
Oh yeah? Well at least I don't crash people's profile on Amethyst! 🤣
If you saw the number of crashes I get daily on Damus now, you'd feel better. I'm biting my tongue for now, but this must be some sort of karma coming to bite me for all the sh I've talked.
And nothing meant by insult, was eager to use "dross" as clever name pun
Surely with your new found Python wizardry you could knock something up🤔.
The guy who made word5 could surely do it, and easily. We may not need to deploy the big guns of 7s coding skills on this one
Lol, as if :)
This is what claude (free version lol) things the code for the wordle bot should be ¯\_(ツ)_/¯
import React, { useState, useEffect } from 'react';
import { Trophy, Star, Grid3x3 } from 'lucide-react';
const WordleBot = () => {
const [results, setResults] = useState([]);
const [dailyRanking, setDailyRanking] = useState([]);
const [notableMentions, setNotableMentions] = useState([]);
const [connected, setConnected] = useState(false);
const [relays] = useState([
'wss://relay.damus.io',
'wss://nos.lol',
'wss://relay.nostr.band'
]);
// Parse Wordle result from text
const parseWordleResult = (content, pubkey) => {
const wordleRegex = /Wordle (\d+) ([X1-6])\/6\*?\s*([\n\r\s]*(?:[🟨🟩⬛⬜🟦]+[\n\r\s]*)+)/i;
const match = content.match(wordleRegex);
if (!match) return null;
const puzzleNumber = parseInt(match[1]);
const score = match[2] === 'X' ? 7 : parseInt(match[2]);
const gridText = match[3];
// Extract grid rows
const rows = gridText.split(/[\n\r]+/)
.map(row => row.trim())
.filter(row => /[🟨🟩⬛⬜🟦]/.test(row));
return {
pubkey,
puzzleNumber,
score,
grid: rows,
content,
timestamp: Date.now()
};
};
// Check if result is all green (perfect first try or perfect pattern)
const isAllGreen = (grid) => {
return grid.some(row => /^🟩+$/.test(row) && row.length === 5);
};
// Check for symmetrical patterns
const isSymmetrical = (grid) => {
if (grid.length < 2) return false;
for (let row of grid) {
const cleaned = row.replace(/[^🟨🟩⬛⬜🟦]/g, '');
if (cleaned.length < 3) continue;
const reversed = cleaned.split('').reverse().join('');
if (cleaned === reversed) return true;
}
// Check vertical symmetry
if (grid.length >= 2) {
const cleaned = grid.map(row => row.replace(/[^🟨🟩⬛⬜🟦]/g, ''));
for (let i = 0; i < Math.floor(cleaned.length / 2); i++) {
if (cleaned[i] === cleaned[cleaned.length - 1 - i]) {
return true;
}
}
}
return false;
};
// Connect to Nostr relays
const connectToNostr = async () => {
try {
const ws = new WebSocket(relays[0]);
ws.onopen = () => {
setConnected(true);
// Subscribe to notes with wordle content
const subscription = [
"REQ",
"wordle-sub",
{
kinds: [1],
"#t": ["wordle"],
since: Math.floor(Date.now() / 1000) - 86400 // Last 24 hours
}
];
ws.send(JSON.stringify(subscription));
};
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
if (data[0] === "EVENT") {
const note = data[2];
const parsed = parseWordleResult(note.content, note.pubkey);
if (parsed) {
setResults(prev => {
const exists = prev.some(r => r.pubkey === parsed.pubkey && r.puzzleNumber === parsed.puzzleNumber);
if (exists) return prev;
return [...prev, parsed];
});
}
}
};
ws.onerror = () => setConnected(false);
ws.onclose = () => setConnected(false);
} catch (error) {
console.error('Connection error:', error);
setConnected(false);
}
};
// Generate demo data
const generateDemoData = () => {
const demoResults = [
{
pubkey: 'alice123',
puzzleNumber: 1234,
score: 3,
grid: ['⬛🟨⬛⬛⬛', '🟩⬛🟩⬛🟩', '🟩🟩🟩🟩🟩'],
timestamp: Date.now() - 3600000
},
{
pubkey: 'bob456',
puzzleNumber: 1234,
score: 4,
grid: ['⬛⬛🟨⬛⬛', '🟨🟨⬛⬛⬛', '🟩🟩🟩⬛🟩', '🟩🟩🟩🟩🟩'],
timestamp: Date.now() - 7200000
},
{
pubkey: 'charlie789',
puzzleNumber: 1234,
score: 2,
grid: ['🟩⬛🟩⬛🟩', '🟩🟩🟩🟩🟩'],
timestamp: Date.now() - 1800000
},
{
pubkey: 'diana101',
puzzleNumber: 1234,
score: 5,
grid: ['⬛🟨⬛🟨⬛', '⬛🟨⬛🟨⬛', '🟨⬛🟨⬛🟨', '🟩🟩⬛🟩🟩', '🟩🟩🟩🟩🟩'],
timestamp: Date.now() - 5400000
},
{
pubkey: 'eve202',
puzzleNumber: 1234,
score: 1,
grid: ['🟩🟩🟩🟩🟩'],
timestamp: Date.now() - 9000000
}
];
setResults(demoResults);
};
// Update rankings and notable mentions
useEffect(() => {
if (results.length === 0) return;
// Sort by score (lower is better)
const ranked = [...results].sort((a, b) => {
if (a.score !== b.score) return a.score - b.score;
return a.timestamp - b.timestamp; // Earlier wins ties
});
setDailyRanking(ranked);
// Find notable mentions
const notable = [];
results.forEach(result => {
if (isAllGreen(result.grid)) {
notable.push({
...result,
reason: result.score === 1 ? '🎯 Perfect First Try!' : '💚 All Green Result!'
});
} else if (isSymmetrical(result.grid)) {
notable.push({
...result,
reason: '✨ Beautiful Symmetrical Pattern!'
});
}
});
setNotableMentions(notable);
}, [results]);
useEffect(() => {
generateDemoData();
}, []);
const formatPubkey = (pubkey) => {
return pubkey.slice(0, 8) + '...' + pubkey.slice(-4);
};
return (
Nostr Wordle Tracker
Daily rankings and notable Wordle results from Nostr
Tracking {results.length} Wordle result{results.length !== 1 ? 's' : ''}
{notableMentions.length > 0 && (
Notable Mentions
{notableMentions.map((result, idx) => (
{result.grid.map((row, i) => (
))}
))}
)}
Daily Ranking
{dailyRanking.length === 0 ? (
No results yet. Connect to Nostr or load demo data to see rankings.
) : (
{dailyRanking.map((result, idx) => (
idx === 0 ? 'bg-yellow-50 border-yellow-400' :
idx === 1 ? 'bg-gray-50 border-gray-300' :
idx === 2 ? 'bg-orange-50 border-orange-300' :
'bg-white border-gray-200'
}`}>
idx === 0 ? 'text-yellow-600' :
idx === 1 ? 'text-gray-600' :
idx === 2 ? 'text-orange-600' :
'text-gray-400'
}`}>
{idx === 0 ? '🥇' : idx === 1 ? '🥈' : idx === 2 ? '🥉' : `#${idx + 1}`}
Wordle {result.puzzleNumber} - Score: {result.score}/6
{new Date(result.timestamp).toLocaleTimeString()}
{result.grid.map((row, i) => (
))}
))}
)}
);
};
export default WordleBot;
Tf is this AI diarrhea. I'm on mobile ffs
It's the cause to make the wordle bot.
I wouldn't even know where to put the code.
It probably doesn't even work tbh, AI is such bullshit
Looool. Right there with you. Much power, no clue how to wield it
quality of inputs often determines quality of outputs. git gud.
You talking to me, mf?
No, you're right. But the real hurdle for amateurs right now is things like git, general understanding of ap flow/stack, and the like. I can mingle some data like no other, but that's where my skills end