|
@@ -23,7 +23,12 @@ WEEKDAYS = {
|
|
|
|
|
|
|
|
|
def parse_datetime(args):
|
|
|
- day_date, args = pop_arg(args)
|
|
|
+ try:
|
|
|
+ day_date = next(args)
|
|
|
+ except StopIteration:
|
|
|
+ print(1)
|
|
|
+ return # must have at least one more argument
|
|
|
+
|
|
|
day_date = day_date.lower()
|
|
|
if day_date in WEEKDAYS:
|
|
|
today = datetime.date.today()
|
|
@@ -43,19 +48,35 @@ def parse_datetime(args):
|
|
|
day = date_parts[1]
|
|
|
year = datetime.date.today().year
|
|
|
else:
|
|
|
- return
|
|
|
+ print(2)
|
|
|
+ return # invalid format
|
|
|
|
|
|
hour = 19
|
|
|
minute = 45
|
|
|
- time, ampm = pop_arg(args)
|
|
|
- if time is not None:
|
|
|
- time_parts = time.split(":")
|
|
|
- hour = time_parts[0]
|
|
|
- if len(time_parts) > 1:
|
|
|
- minute = time_parts[1]
|
|
|
- if ampm is not None:
|
|
|
- if ampm.lower() == "pm":
|
|
|
- hour = int(hour) + 12
|
|
|
+
|
|
|
+ try:
|
|
|
+ time = next(args)
|
|
|
+ except StopIteration:
|
|
|
+ return datetime.datetime(
|
|
|
+ int(year), int(month), int(day),
|
|
|
+ int(hour), int(minute)
|
|
|
+ )
|
|
|
+
|
|
|
+ time_parts = time.split(":")
|
|
|
+ hour = time_parts[0]
|
|
|
+ if len(time_parts) > 1:
|
|
|
+ minute = time_parts[1]
|
|
|
+
|
|
|
+ try:
|
|
|
+ ampm = next(args)
|
|
|
+ except StopIteration:
|
|
|
+ return datetime.datetime(
|
|
|
+ int(year), int(month), int(day),
|
|
|
+ int(hour), int(minute)
|
|
|
+ )
|
|
|
+
|
|
|
+ if ampm.lower() == "pm":
|
|
|
+ hour = int(hour) + 12
|
|
|
|
|
|
return datetime.datetime(
|
|
|
int(year), int(month), int(day),
|
|
@@ -63,12 +84,13 @@ def parse_datetime(args):
|
|
|
)
|
|
|
|
|
|
|
|
|
+
|
|
|
def get_upcoming(db):
|
|
|
return db.query(DnDSession).order_by(DnDSession.session_time).first()
|
|
|
|
|
|
|
|
|
def get_fmt_next(db):
|
|
|
- dt = get_upcoming_time(db).session_time
|
|
|
+ dt = get_upcoming(db).session_time
|
|
|
if dt is None or dt < datetime.datetime.now():
|
|
|
return "No upcoming session found."
|
|
|
else:
|
|
@@ -77,23 +99,33 @@ def get_fmt_next(db):
|
|
|
|
|
|
|
|
|
def session_next(db, message, args):
|
|
|
- return RollbotResponse(message, "TODO")
|
|
|
+ dt = parse_datetime(args)
|
|
|
+ if dt is None:
|
|
|
+ return RollbotResponse(
|
|
|
+ message,
|
|
|
+ failure=RollbotFailure.INVALID_ARGUMENTS,
|
|
|
+ debugging={"explain": "Could not process argument as a date/time."}
|
|
|
+ )
|
|
|
+
|
|
|
+ db.add(DnDSession(session_time=dt))
|
|
|
+
|
|
|
+ return RollbotResponse(message, txt=get_fmt_next(db))
|
|
|
|
|
|
|
|
|
def session_worst(db, message, args):
|
|
|
- return RollbotResponse(message, "TODO")
|
|
|
+ return RollbotResponse(message, txt="TODO")
|
|
|
|
|
|
|
|
|
def session_view(db, message, args):
|
|
|
- return RollbotResponse(message, "TODO")
|
|
|
+ return RollbotResponse(message, txt="TODO")
|
|
|
|
|
|
|
|
|
def session_late(db, message, args):
|
|
|
- return RollbotResponse(message, "TODO")
|
|
|
+ return RollbotResponse(message, txt="TODO")
|
|
|
|
|
|
|
|
|
def session_cancel(db, message, args):
|
|
|
- return RollbotResponse(message, "TODO")
|
|
|
+ return RollbotResponse(message, txt="TODO")
|
|
|
|
|
|
|
|
|
SUBCOMMANDS = dict(
|
|
@@ -104,6 +136,8 @@ SUBCOMMANDS = dict(
|
|
|
cancel=session_cancel
|
|
|
)
|
|
|
|
|
|
+NEEDS_ADMIN = ("next", "cancel")
|
|
|
+
|
|
|
|
|
|
@as_plugin
|
|
|
def session(db, message):
|
|
@@ -123,4 +157,7 @@ def session(db, message):
|
|
|
}
|
|
|
)
|
|
|
|
|
|
+ if subcommand in NEEDS_ADMIN and not message.from_admin:
|
|
|
+ return RollbotResponse(message, failure=RollbotFailure.PERMISSIONS)
|
|
|
+
|
|
|
return SUBCOMMANDS[subcommand](db, message, args)
|