Add random watering, assign commands
parent
04193f5a72
commit
67c73305d3
|
@ -0,0 +1,11 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import sys
|
||||||
|
from wilty import Wilty
|
||||||
|
|
||||||
|
|
||||||
|
def main(args):
|
||||||
|
app = Wilty()
|
||||||
|
app.mapCommands(args)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main(sys.argv[1:])
|
84
wilty.py
84
wilty.py
|
@ -1,18 +1,20 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import pwd
|
import pwd
|
||||||
|
import random
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
|
||||||
class Wilty():
|
class Wilty():
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
self.name = "wilty"
|
||||||
|
self.version = self.name + " 0.1"
|
||||||
self.save_dir = ".botany"
|
self.save_dir = ".botany"
|
||||||
self.plant_file = "_plant_data.json"
|
self.plant_file = "_plant_data.json"
|
||||||
self.visit_file = "visitors.json"
|
self.visit_file = "visitors.json"
|
||||||
self.harvest_file = "harvest_file.json"
|
self.harvest_file = "harvest_file.json"
|
||||||
self.water_user = "wiltychan"
|
self.water_user = self.name
|
||||||
self.plants = {}
|
self.plants = {}
|
||||||
self.live_plants = {}
|
self.live_plants = {}
|
||||||
self.stats_model = {
|
self.stats_model = {
|
||||||
|
@ -34,6 +36,46 @@ class Wilty():
|
||||||
}
|
}
|
||||||
self.border = "-" * 47
|
self.border = "-" * 47
|
||||||
|
|
||||||
|
def showVersion(self):
|
||||||
|
"""Show version info."""
|
||||||
|
print(self.version)
|
||||||
|
|
||||||
|
def showHelp(self):
|
||||||
|
"""Show usage info."""
|
||||||
|
print("Usage: " + self.name + \
|
||||||
|
" list [user|plant], stats [live], water")
|
||||||
|
|
||||||
|
def mapCommands(self, args):
|
||||||
|
"""Map a list of command keywords to functions."""
|
||||||
|
if len(args) == 1:
|
||||||
|
if args[0] == "list":
|
||||||
|
self.getRawData()
|
||||||
|
self.listLivePlants()
|
||||||
|
elif args[0] == "stats":
|
||||||
|
self.getRawData()
|
||||||
|
self.listStats()
|
||||||
|
elif args[0] == "water":
|
||||||
|
self.getRawData()
|
||||||
|
self.waterRandomPlant()
|
||||||
|
elif args[0] == "version":
|
||||||
|
self.showVersion()
|
||||||
|
else:
|
||||||
|
self.showHelp()
|
||||||
|
elif len(args) == 2:
|
||||||
|
if args[0] == "list" and args[1] == "user":
|
||||||
|
self.getRawData()
|
||||||
|
self.listLivePlants(sort=user)
|
||||||
|
elif args[0] == "list" and args[1] == "plant":
|
||||||
|
self.getRawData()
|
||||||
|
self.listLivePlants(sort=user)
|
||||||
|
elif args[0] == "stats" and args[1] == "live":
|
||||||
|
self.getRawData()
|
||||||
|
self.listStats(subset="live")
|
||||||
|
else:
|
||||||
|
self.showHelp()
|
||||||
|
else:
|
||||||
|
self.showHelp()
|
||||||
|
|
||||||
def formatTime(self, ts):
|
def formatTime(self, ts):
|
||||||
"""Format an integer timestamp (seconds) to a timestamp string (days,
|
"""Format an integer timestamp (seconds) to a timestamp string (days,
|
||||||
hours and minutes), e.g. 12d 12h 12m.
|
hours and minutes), e.g. 12d 12h 12m.
|
||||||
|
@ -104,6 +146,35 @@ class Wilty():
|
||||||
if not self.plants[u]["is_dead"]:
|
if not self.plants[u]["is_dead"]:
|
||||||
self.live_plants[u] = self.plants[u]
|
self.live_plants[u] = self.plants[u]
|
||||||
|
|
||||||
|
def waterRandomPlant(self):
|
||||||
|
"""Randomly select a live plant to water."""
|
||||||
|
# Select a user's plant that is open to visitors
|
||||||
|
user = list(self.live_plants)[random.randint(0, \
|
||||||
|
len(self.live_plants) - 1)]
|
||||||
|
while not self.live_plants[user]["allow_visit"]:
|
||||||
|
user = list(self.live_plants)[random.randint(0, \
|
||||||
|
len(self.live_plants) - 1)]
|
||||||
|
# Contenate string to ensure fixed order of keys in the json,
|
||||||
|
# to be visually consistent with the in-game visitor watering quirk.
|
||||||
|
# (Notably, there is an extra space after the comma of the timestamp
|
||||||
|
# value, and after the comma of the preceding item's closing brace.)
|
||||||
|
visit_entry = " {\n \"timestamp\": " + str(int(time.time())) + \
|
||||||
|
", " + "\n \"user\": " + "\"" + self.water_user + "\"" + \
|
||||||
|
"\n }"
|
||||||
|
sv_dir = "/home/" + user + "/" + self.save_dir + "/"
|
||||||
|
with open(sv_dir + self.visit_file, "r") as visit_rfh:
|
||||||
|
visit_json = visit_rfh.read()
|
||||||
|
# 1st visitor
|
||||||
|
if "[]" in visit_json:
|
||||||
|
visit_data = visit_json.replace("[]", "[\n" + visit_entry + "\n]")
|
||||||
|
# nth visitor
|
||||||
|
else:
|
||||||
|
visit_data = visit_json.replace("\n]", \
|
||||||
|
", \n" + visit_entry + "\n]")
|
||||||
|
with open(sv_dir + self.visit_file, "w") as visit_wfh:
|
||||||
|
visit_wfh.write(visit_data)
|
||||||
|
print("You watered " + user + "\'s plant. Thanks!")
|
||||||
|
|
||||||
def listLivePlants(self, *args, **kwargs):
|
def listLivePlants(self, *args, **kwargs):
|
||||||
"""Prints a list of living plants open to visitors. Optionally specify
|
"""Prints a list of living plants open to visitors. Optionally specify
|
||||||
a sort flag to sort the list alphabetically by username or plant type,
|
a sort flag to sort the list alphabetically by username or plant type,
|
||||||
|
@ -194,7 +265,7 @@ class Wilty():
|
||||||
count["avg_score"] = int(count["score"] / count["total"])
|
count["avg_score"] = int(count["score"] / count["total"])
|
||||||
|
|
||||||
def genStats(self, subset):
|
def genStats(self, subset):
|
||||||
"""Generate garden stats of all plants or only live plants."""
|
"""Generate garden stats of all or only live plants."""
|
||||||
stats = dict(self.stats_model)
|
stats = dict(self.stats_model)
|
||||||
if subset == "live":
|
if subset == "live":
|
||||||
plants_set = self.live_plants
|
plants_set = self.live_plants
|
||||||
|
@ -222,6 +293,7 @@ class Wilty():
|
||||||
stats = self.genStats("live")
|
stats = self.genStats("live")
|
||||||
else:
|
else:
|
||||||
stats = self.genStats("all")
|
stats = self.genStats("all")
|
||||||
|
print(self.border)
|
||||||
print("Garden Stats (" + kwargs.get("subset", "all") + " plants)")
|
print("Garden Stats (" + kwargs.get("subset", "all") + " plants)")
|
||||||
print(self.border)
|
print(self.border)
|
||||||
print(
|
print(
|
||||||
|
@ -238,9 +310,3 @@ class Wilty():
|
||||||
"\nTotal plants: " + str(stats["total"])
|
"\nTotal plants: " + str(stats["total"])
|
||||||
)
|
)
|
||||||
print(self.border)
|
print(self.border)
|
||||||
|
|
||||||
|
|
||||||
instance = Wilty()
|
|
||||||
instance.getRawData()
|
|
||||||
instance.listLivePlants()
|
|
||||||
instance.listStats(subset="live")
|
|
||||||
|
|
Loading…
Reference in New Issue