Giter VIP home page Giter VIP logo

ip's Introduction

MattBot

๐Ÿš€ Introducing MattBot: Your Ultimate Task Management Assistant! ๐Ÿ“†

Are you drowning in a sea of to-dos, overwhelmed by deadlines, and struggling to keep up with your busy schedule? Say goodbye to chaos and hello to efficiency with MattBot โ€“ your new personal task management assistant!

๐ŸŒŸ Why Choose MattBot? ๐ŸŒŸ

  • ๐Ÿ“Œ Seamless Task Management: MattBot effortlessly organizes your tasks, events, and deadlines all in one place, ensuring nothing slips through the cracks.

  • ๐Ÿ—“๏ธ Smart Event Scheduler: Never miss an important meeting or appointment again! MattBot helps you schedule events.

  • ๐Ÿš€ Effortless Deadlines: Set deadlines with ease, and MattBot will keep you updated on your progress and notify you when time is running out.

  • ๐Ÿ” Advanced Search: Quickly find the information you need with powerful search capabilities. No more digging through endless notes or calendars!

  • ๐Ÿ“Š Analytics & Insights: Gain valuable insights into your productivity trends with MattBot's data-driven analytics. Understand where your time goes and make improvements.

  • ๐Ÿ”’ Security First: Your data is your business, and we take security seriously. MattBot employs state-of-the-art encryption to keep your information safe and sound.

  • ๐Ÿ“ฑ Cross-Platform Access: Access MattBot on your preferred device โ€“ whether it's your smartphone, tablet, or computer. Stay organized wherever you are!

  • ๐Ÿค– AI-Powered Assistance: MattBot utilizes cutting-edge artificial intelligence to adapt to your unique needs, offering smart suggestions and automating repetitive tasks.

  • ๐ŸŽฏ Goal Tracking: Set and track your goals effortlessly with MattBot's goal management feature. Achieve your dreams one step at a time!

๐ŸŽ Special Offer: Try MattBot today and receive a 7-day free trial of our premium features!

๐Ÿš€ Don't let disorganization hold you back. Take control of your tasks, events, and deadlines with MattBot โ€“ your ultimate task management assistant!

๐Ÿ‘‰ Get started now at www.SungMatt.com/MattBot and experience the future of productivity! ๐Ÿ‘ˆ

MattBot โ€“ Your Tasks, Events, and Deadlines, All in One Place! ๐Ÿ“…โœ…

To do:

  • Add GUI
  • Conquer the world

What MattBot can't do yet

  1. Eat Lunch
  2. Eat Dinner
// You can't use it elsewhere, but here's a codeblock!
while(true) {
    sleep(100);
}

User Testimonies

MattBot is the best task manager made, ever!" - Abraham Lincoln

ip's People

Contributors

sungmatt avatar j-lum avatar damithc avatar seanleong339 avatar jiachen247 avatar eclipse-dominator avatar

ip's Issues

Sharing iP code quality feedback [for @SungMatt] - Round 2

@SungMatt We did an automated analysis of your code to detect potential areas to improve the code quality. We are sharing the results below, so that you can avoid similar problems in your tP code (which will be graded more strictly for code quality).

IMPORTANT: Note that the script looked for just a few easy-to-detect problems only, and at-most three example are given i.e., there can be other areas/places to improve.

Aspect: Tab Usage

No easy-to-detect issues ๐Ÿ‘

Aspect: Naming boolean variables/methods

No easy-to-detect issues ๐Ÿ‘

Aspect: Brace Style

No easy-to-detect issues ๐Ÿ‘

Aspect: Package Name Style

No easy-to-detect issues ๐Ÿ‘

Aspect: Class Name Style

No easy-to-detect issues ๐Ÿ‘

Aspect: Dead Code

Example from src/main/java/mattbot/command/MattBot.java lines 45-45:

        // List<Task> taskList = new ArrayList<Task>();

Example from src/main/java/mattbot/command/MattBot.java lines 164-164:

            // assert t.getDate() == dtDueDate;

Example from src/main/java/mattbot/command/Storage.java lines 34-34:

        // myReader.close();

Suggestion: Remove dead code from the codebase.

Aspect: Method Length

No easy-to-detect issues ๐Ÿ‘

Aspect: Class size

No easy-to-detect issues ๐Ÿ‘

Aspect: Header Comments

Example from src/main/java/mattbot/command/MattBot.java lines 138-142:

    /**
     * Create a new Todo.
     * @param arguments Information about Todo.
     * @return Verbal confirmation of Todo creation.
     */

Example from src/main/java/mattbot/command/MattBot.java lines 150-154:

    /**
     * Create a new Deadline.
     * @param arguments Information about Deadline.
     * @return Verbal confirmation of Deadline creation.
     */

Example from src/main/java/mattbot/command/MattBot.java lines 172-176:

    /**
     * Create a new Event.
     * @param arguments Information about Event.
     * @return Verbal confirmation of Event creation.
     */

Suggestion: Ensure method/class header comments follow the format specified in the coding standard, in particular, the phrasing of the overview statement.

Aspect: Recent Git Commit Message

No easy-to-detect issues ๐Ÿ‘

Aspect: Binary files in repo

No easy-to-detect issues ๐Ÿ‘


โ— You are not required to (but you are welcome to) fix the above problems in your iP, unless you have been separately asked to resubmit the iP due to code quality issues.

โ„น๏ธ The bot account used to post this issue is un-manned. Do not reply to this post (as those replies will not be read). Instead, contact [email protected] if you want to follow up on this post.

Sharing iP code quality feedback [for @SungMatt]

@SungMatt We did an automated analysis of your code to detect potential areas to improve the code quality. We are sharing the results below, to help you improve the iP code further.

IMPORTANT: Note that the script looked for just a few easy-to-detect problems only, and at-most three example are given i.e., there can be other areas/places to improve.

Aspect: Tab Usage

No easy-to-detect issues ๐Ÿ‘

Aspect: Naming boolean variables/methods

No easy-to-detect issues ๐Ÿ‘

Aspect: Brace Style

No easy-to-detect issues ๐Ÿ‘

Aspect: Package Name Style

No easy-to-detect issues ๐Ÿ‘

Aspect: Class Name Style

No easy-to-detect issues ๐Ÿ‘

Aspect: Dead Code

Example from src/main/java/mattbot/MattBot.java lines 29-29:

        // List<Task> taskList = new ArrayList<Task>();

Example from src/main/java/mattbot/Storage.java lines 34-34:

        // myReader.close();

Suggestion: Remove dead code from the codebase.

Aspect: Method Length

Example from src/main/java/mattbot/MattBot.java lines 27-175:

    public static void main(String[] args) {
        // Load save file
        // List<Task> taskList = new ArrayList<Task>();
        try {
            mattmory = new Storage();
            tasks = mattmory.load();
        } catch (IOException e) {
            System.out.println(e);
            tasks = new TaskList();
        }

        /*String logo = " ____        _        \n"
                + "|  _ \\ _   _| | _____ \n"
                + "| | | | | | | |/ / _ \\\n"
                + "| |_| | |_| |   <  __/\n"
                + "|____/ \\__,_|_|\\_\\___|\n";
        System.out.println("Hello from\n" + logo);*/
        System.out.println("____________________________________________________________");
        System.out.println("Hello! I'm " + NAME);
        System.out.println("What can I do for you?");
        System.out.println("____________________________________________________________");

        Scanner sc = new Scanner(System.in);
        String userInput;
        label:
        while (true) {
            // Take user input in, and process user input
            userInput = sc.nextLine();
            String command = userInput.split(" ", 2)[0];
            switch (command) {
                case "bye":
                    printTop();
                    System.out.println("Bye, Hope to see you soon!");
                    printBottom();
                    break label;
                case "list":
                    printTop();
                    for (int i = 0; i < tasks.size(); i++) {
                        Task t = tasks.getTask(i + 1);
                        System.out.println(String.format("%d. %s", i + 1, t));
                    }
                    printBottom();
                    break;
                case "mark": {
                    printTop();
                    int taskId = Integer.parseInt(userInput.split(" ", 2)[1]);
                    tasks.markTask(taskId);
                    mattmory.writeBack(tasks);
                    Task t = tasks.getTask(taskId);
                    System.out.println("Great job! You have completed the task " + t.showName());
                    printBottom();
                    break;
                }
                case "unmark": {
                    printTop();
                    int taskId = Integer.parseInt(userInput.split(" ", 2)[1]);
                    tasks.unmarkTask(taskId);
                    mattmory.writeBack(tasks);
                    Task t = tasks.getTask(taskId);
                    System.out.println("Oh no, you have uncompleted " + t.showName());
                    printBottom();
                    break;
                }
                default: {
                    int len = userInput.split(" ", 2).length;
                    if (len <= 1) {
                        printTop();
                        System.out.println("Oh no, your input is bad.");
                        System.out.println(command + " requires an argument.");
                        printBottom();
                        continue;
                    }
                    printTop();
                    String arguments = userInput.split(" ", 2)[1];
                    Task t;
                    if (command.equals("todo")) {
                        t = new Todo(arguments);
                        tasks.addTask(t);
                        mattmory.writeBack(tasks);
                        System.out.println("I've added this to your tasks: ");
                        System.out.println(t);
                    } else if (command.equals("deadline")) {
                        String name = arguments.split(" /by ", 2)[0];
                        String dueDate = arguments.split(" /by ", 2)[1];
                        try {
                            LocalDateTime dtDueDate = LocalDateTime.parse(dueDate, PRINT_DTF);
                            t = new Deadline(name, dtDueDate);
                            tasks.addTask(t);
                            mattmory.writeBack(tasks);
                            System.out.println("I've added this to your tasks: ");
                            System.out.println(t);
                        } catch (DateTimeParseException e) {
                            System.out.println("Your date is invalid. It should be in the form YYYYMMDDTHHMM."
                                    + " An example is 20231231T2359.");
                        }
                    } else if (command.equals("event")) {
                        String name = arguments.split(" /from ", 2)[0];
                        String dates = arguments.split(" /from ", 2)[1];
                        String startDate = dates.split(" /to ")[0];
                        String endDate = dates.split(" /to ", 2)[1];
                        try {
                            LocalDateTime dtStartDate = LocalDateTime.parse(startDate, PRINT_DTF);
                            LocalDateTime dtEndDate = LocalDateTime.parse(endDate, PRINT_DTF);
                            t = new Event(name, dtStartDate, dtEndDate);
                            tasks.addTask(t);
                            mattmory.writeBack(tasks);
                            System.out.println("I've added this to your tasks: ");
                            System.out.println(t);
                        } catch (DateTimeParseException e) {
                            System.out.println("Your date is invalid. It should be in the form YYYYMMDDTHHMM."
                                    + "An example is 20231231T2359.");
                        }
                    } else if (command.equals("delete")) {
                        if (tasks.size() == 0 || tasks.size() < Integer.parseInt(arguments)) {
                            System.out.println("Oops, you're deleting a task that doesn't exist.");
                            continue;
                        }
                        t = tasks.getTask(Integer.parseInt(arguments));
                        System.out.println("I have removed this task:");
                        System.out.println(t);
                        tasks.removeTask(Integer.parseInt(arguments));
                        mattmory.writeBack(tasks);
                    } else if (command.equals("find")) {
                        ArrayList<Task> found = new ArrayList<Task>();
                        for (int i = 1; i <= tasks.size(); i++) {
                            t = tasks.getTask(i);
                            if (t.showName().contains(arguments)) {
                                found.add(t);
                            }
                        }
                        if (found.size() == 0) {
                            System.out.println("Oh no, I can't seem to find any tasks matching " + arguments + ".");
                            continue;
                        }
                        System.out.println("I have found " + found.size() + " tasks matching your search!");
                        for (int i = 0; i < found.size(); i++) {
                            t = tasks.getTask(i+1);
                            System.out.println(String.format("%d. %s", i + 1, t));
                        }
                    } else {
                        System.out.println("I didn't quite understand your input.");
                        continue;
                    }
                    printBottom();
                    break;
                }
            }
        }
    }

Suggestion: Consider applying SLAP (and other abstraction mechanisms) to shorten methods e.g., extract some code blocks into separate methods. You may ignore this suggestion if you think a longer method is justified in a particular case.

Aspect: Class size

No easy-to-detect issues ๐Ÿ‘

Aspect: Header Comments

No easy-to-detect issues ๐Ÿ‘

Aspect: Recent Git Commit Message

possible problems in commit cb16377:


Merge branch 'Level-9'
Add find functionality.


  • No blank line between subject and body

possible problems in commit fdb16f9:


Refined Todo coding standards


  • Not in imperative mood (?)

possible problems in commit f8f554e:


Add find functionality.


  • Subject line should not end with a period

Suggestion: Follow the given conventions for Git commit messages for future commits (no need to modify past commit messages).

Aspect: Binary files in repo

No easy-to-detect issues ๐Ÿ‘


โ„น๏ธ The bot account used to post this issue is un-manned. Do not reply to this post (as those replies will not be read). Instead, contact [email protected] if you want to follow up on this post.

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.