Coder Social home page Coder Social logo

moneo's People

Contributors

rumdood avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

moneo's Issues

Allow for Fuzzy Matching of Task Identification for Bot Commands

Allow for fuzzier matching to determine what task is the target of a bot command like /complete.

To implement this, consider modifying the IDs of the tasks to be UUIDs and and let the name be a sort of "short description" of the task. Then utilize some level of fuzzy matching so that the following scenario works:

User: /create Call My Doctor Tomorrow
Bot: Task "Call My Doctor Tomorrow" created
User: /complete call doctor
Bot: "Call My Doctor Tomorrow" completed

Allow creation of new tasks via chat

GIVEN THAT: I am in a chat with the Telegram bot
WHEN: I send an appropriate message to the bot as determined by either a set of menu command or via natural language
THEN: The bot will being a dialog to create a new task

Add natural langage support for scheduling

Currently the bot requires dates and times to be given in specific formats so that it can correctly parse them (e.g. "yyyy-MM-dd HH:mm:ss[am/pm]"

This should be improved so that the user can specify a date/time like "tomorrow at noon" or "Friday afternoons at 3" and the bot can then deduce the correct date or CRON statement.

Examples:

"Tomorrow at noon" - Calculate the date for tomorrow and set the time to 12:00:00pm
"Friday afternoons at 3" - CRON statement of 0 0 15 * * 5
"Next Tuesday at 10am" - Calculate the date for the upcoming Tuesday and set the time to 10:00:00am

Add /help command

Add a /help command for the bot to respond to with a list of available slash commands.

When no argument is added, the response should be something similar to:

/create - Create a new task
/complete - Complete a task
/skip - Skip a task

These descriptions should be embedded via attributes or possible a json config file (should all commands be configured via JSON and then source-generated?)

The user should be able to do something like /help /create and get back a full help on that command if it exists.

Task Name for Commands Should Not Be Case-Sensitive

When a task is created from the chatbot commands (i.e. /create), the casing used is what gets echoed back to the user, but the API's GET calls are case-sensitive and tasks are created in all-lower-case.

Scenario:

User: /create MyTask
...[Q&A to build task]
Bot: Created MyTask!
User: /complete MyTask <--- Backend receives a 404 error because the task MyTask is not found by the API
User: /complete mytask <--- Succeeds

Create Non-Durable-Functions Host

Create an alternative host that does not utilize Durable Functions, allowing for the bot to be hosted somewhere other than Azure Functions.

This would require/allow using a different database for task/user information as well as utilizing an independent scheduler (e.g. Quartz or Hangfire) for reminders and badgers.

Missing Scheduled Tasks

Occasionally tasks are not being sent to the chat. E.G. a task to take medication every day at 0900 and 2100 will work fine for several weeks and then suddenly no update reminder will be sent at 0900 one day. Completion of the task is still tracked, but the schedule seems to be turned off.

This can be fixed by submitting an "update" for the task definition, which recreates the schedule for future task events.

Workflow Manager for Complete and Skip Task Commands

Add support for longer-running /complete and /skip workflows so that if the user sends a request without a task id (e.g. /complete instead of /complete mytask), the bot can respond to the user and have the user supply the id while staying in the workflow.

Example Conversation:

User: /complete
Bot: What task did you wish to complete?
User: mytask
Bot: Thanks for finishing mytask

Support for Todoist as a Task Backing store

Allow for the service to be configured to connect to a user's todoist account via an app key and pull tasks from there. The actual scheduling of reminders and badgers would still be handled by Moneo (either via Durable Functions or via another scheduler), but actual task details beyond that would be stored in todoist and polled from the API.

Would require:

  • Configurable polling interval for picking up changes in todoist
  • Modifying the reminder/badger process to pull the task from todoist before sending the message to the user in order to confirm the task was not completed outside of Moneo
  • Determine where to store the schedule for reminders and badgers.
    • Could be stored in the reminder/badger store
    • Could be stored in todoist as labels on the task (e.g. @moneo_badger:30 for a 30 minute interval for badgers)

MoneoFunctions Project is not in Isolated Process Mode

The hosting for MoneoFunctions is currently not in IsolatedProcess. This creates an issue with moving forward to dotnet 8 and beyond.

Moving to an IsolatedProcess in the Moneo.Functions.Isolated project presents new issues with the massive modifications to the Durable Entities API and the fact that Moneo has evolved to be significantly more complex than it started (and has carried over some ultimately poor design choices).

Primary issues arising are:

  • Durable entity API is significantly different and the documentation on migration is confusing - AT BEST.
  • The current Moneo architecture uses Durable Entities out of the box as the sole storage mechanism for tasks. This made sense when the entire goal was just to have a single task for monitoring one person's medication intake, but with the expansion to being a full-on task management solution via chat, this is...not great.
  • This dependency on Durable Entities as the sole mode of storage has meant a lack of good filtering or searchability for retrieving tasks, requiring a fetching of all tasks and then having the application layer filter the objects
  • The durable entities API is not as inherently stable as I had hoped it would be

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.