Add gen and fortune tools - gen.py: Password, UUID, lorem, hash, random, slug, timestamp - fortune.py: Random wisdom and daily fortune - 33 tools total!
This commit is contained in:
126
tools/fortune.py
Executable file
126
tools/fortune.py
Executable file
@ -0,0 +1,126 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
fortune - Random wisdom and fortune
|
||||
|
||||
Combines wisdom collection with classic fortune vibes.
|
||||
"""
|
||||
|
||||
import json
|
||||
import random
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
WORKSPACE = Path("/home/wdjones/.openclaw/workspace")
|
||||
WISDOM_FILE = WORKSPACE / "data" / "wisdom.json"
|
||||
|
||||
# Built-in fortunes if wisdom is empty
|
||||
FORTUNES = [
|
||||
"The best time to start was yesterday. The second best time is now.",
|
||||
"Simple is better than complex.",
|
||||
"Done is better than perfect.",
|
||||
"You are not your code.",
|
||||
"First, solve the problem. Then, write the code.",
|
||||
"Code is read more often than it is written.",
|
||||
"The only way to go fast is to go well.",
|
||||
"Make it work, make it right, make it fast.",
|
||||
"Weeks of coding can save you hours of planning.",
|
||||
"There are only two hard things in CS: cache invalidation and naming things.",
|
||||
"It works on my machine!",
|
||||
"The quieter you become, the more you can hear.",
|
||||
"What you do today is important because you're exchanging a day of your life for it.",
|
||||
"The obstacle is the way.",
|
||||
"We suffer more in imagination than in reality.",
|
||||
"Focus on what you can control.",
|
||||
"The impediment to action advances action. What stands in the way becomes the way.",
|
||||
"You have power over your mind, not outside events.",
|
||||
"Think of yourself as dead. Now take what's left and live it properly.",
|
||||
"If it is not right, do not do it. If it is not true, do not say it.",
|
||||
]
|
||||
|
||||
def load_wisdom() -> list:
|
||||
"""Load wisdom entries."""
|
||||
if WISDOM_FILE.exists():
|
||||
try:
|
||||
with open(WISDOM_FILE) as f:
|
||||
data = json.load(f)
|
||||
return [w['text'] for w in data]
|
||||
except:
|
||||
pass
|
||||
return []
|
||||
|
||||
def fortune():
|
||||
"""Get a random fortune."""
|
||||
# Combine wisdom and built-in fortunes
|
||||
wisdom = load_wisdom()
|
||||
all_fortunes = FORTUNES + wisdom
|
||||
|
||||
selected = random.choice(all_fortunes)
|
||||
|
||||
width = min(60, max(len(selected), 40))
|
||||
|
||||
print()
|
||||
print("╭" + "─" * (width + 2) + "╮")
|
||||
|
||||
# Word wrap
|
||||
words = selected.split()
|
||||
lines = []
|
||||
current = ""
|
||||
for word in words:
|
||||
if len(current) + len(word) + 1 <= width:
|
||||
current = current + " " + word if current else word
|
||||
else:
|
||||
lines.append(current)
|
||||
current = word
|
||||
if current:
|
||||
lines.append(current)
|
||||
|
||||
for line in lines:
|
||||
print(f"│ {line:<{width}} │")
|
||||
|
||||
print("╰" + "─" * (width + 2) + "╯")
|
||||
print()
|
||||
|
||||
def daily_fortune():
|
||||
"""Get today's fortune (consistent for the day)."""
|
||||
wisdom = load_wisdom()
|
||||
all_fortunes = FORTUNES + wisdom
|
||||
|
||||
# Seed with today's date
|
||||
day_seed = int(datetime.now().strftime("%Y%m%d"))
|
||||
random.seed(day_seed)
|
||||
selected = random.choice(all_fortunes)
|
||||
random.seed()
|
||||
|
||||
print("\n🌅 Today's Fortune:")
|
||||
|
||||
width = min(60, max(len(selected), 40))
|
||||
print("─" * (width + 4))
|
||||
|
||||
words = selected.split()
|
||||
lines = []
|
||||
current = ""
|
||||
for word in words:
|
||||
if len(current) + len(word) + 1 <= width:
|
||||
current = current + " " + word if current else word
|
||||
else:
|
||||
lines.append(current)
|
||||
current = word
|
||||
if current:
|
||||
lines.append(current)
|
||||
|
||||
for line in lines:
|
||||
print(f" {line}")
|
||||
|
||||
print("─" * (width + 4))
|
||||
print()
|
||||
|
||||
def main():
|
||||
import sys
|
||||
|
||||
if len(sys.argv) > 1 and sys.argv[1] == 'daily':
|
||||
daily_fortune()
|
||||
else:
|
||||
fortune()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user