# TODO: add a fucking scoreboard or something? this is a copy of a Espernet bot. from moonchat import * import sys import random import io class Bot: def __init__(self, chat: Moonchat, words: list[str]): self.chat = chat self.words = words async def next_winner(self, word: str, limit: float): try: async with asyncio.timeout(limit): async for message in self.chat.messages(): if word in message.content.lower(): return message except TimeoutError: return None async def handle_incoming(self): limit = 60 async for message in self.chat.messages(): if message.nickname == 'Server': continue # ignore the server if "!scramble" not in message.content: continue print(f"GAME REQUESTED: {message=}") selected_word = random.choice(self.words) scrambled_word = ''.join(random.sample(selected_word, len(selected_word))) print(f"GAME START: {scrambled_word} is {selected_word}") await self.chat.send_message(f"Unscramble in {limit} seconds to win! The word is: {scrambled_word}.") winner = await self.next_winner(selected_word, limit) print(f"GAME OVER: {winner=}") if winner: await self.chat.send_message(f"The word was {selected_word}. {winner.nickname} wins!") else: await self.chat.send_message(f"Time's up! The word was {selected_word}. No one wins.") async def main(words: list[str]): chat = await Moonchat.connect("7ks473deh6ggtwqsvbqdurepv5i6iblpbkx33b6cydon3ajph73sssad.onion", 50000) bot = Bot(chat, words) await chat.send_message("To play scramble say: !scramble") await bot.handle_incoming() def load_words(file: io.TextIOBase): for line in file: line = line.strip().lower() if "'" not in line and len(line) == 5: yield line if __name__ == "__main__": import asyncio words = list(load_words(sys.stdin)) print(f"Loaded {len(words)} words") asyncio.run(main(words))