Pymon was developed to help students find answers to course questions. It is not currently hosted for public use, but you can self-host it using the code found in this repo. Currently, I am running the bot on a home desktop.
If you'd like to use this bot in your own server, start by cloning/forking this repo. After that, you'll want to create a .env file in the root directory of the repo with the following contents:
DISCORD_TOKEN=[insert token here]
If you'd like to include your own knowledge base, you can do so by also creating a KNOWLEDGE_PATH environment variable in your .env file. This should point to a local file or a remote URL. Otherwise, the bot will use the queries.json file, which is designed specifically for a course I am teaching.
KNOWLEDGE_PATH=[insert path here]
After that, you'll want to install all requirements. Luckily, I've included a requirements.txt file. You can use the following code to install all requirements:
pip install -r requirements.txt
From there, you can run the bot like any other Python script:
python3 pymon.py
Pymon currently has two main services. First, you can directly @ the bot to get it to respond with the top three matching questions to your query. The response will include an ID which you can lookup with the /get
command. Alternatively, you can use the list in the next section directly. Note that the questions don't have any organization, so asking the bot to give you some matches is sometimes a better start.
Currently, the bot can answer the following questions. The numbers map directly to the lookup IDs, so if you want an answer to any of these questions, just ask the bot with /get
.
- "What is a magic number?" by Jeremy Grifski
- "What is a primitive type?" by Jeremy Grifski
- "How can I create a constant?" by Jeremy Grifski
- "What is testing?" by Jeremy Grifski
- "What is debugging?" by Xining Feng, Jeremy Grifski
- "What is correctness?" by Jeremy Grifski
- "What is JUnit?" by Jeremy Grifski
- "What is unit testing?" by Jeremy Grifski
- "What is an expression tree?" by Jeremy Grifski
- "What is confidence building?" by Jeremy Grifski
- "What is the declared type of a variable?" by Jeremy Grifski
- "What is the static type of a variable?" by Jeremy Grifski
- "What is method overriding?" by Jeremy Grifski, Alexia Scarvelli, Zihe Fang, Tae Yeon Kim, Le Chang
- "What is method overloading?" by Jeremy Grifski
- "What is the implements relationship?" by Yibo Gan, Jeremy Grifski
- "What is the extends relationship?" by Yi-You (Joseph) Chiu, Jeremy Grifski
- "What is a mathematical string?" by Jeremy Grifski
- "What is mathematical string notation for concatenation?" by Jeremy Grifski
- "What is a parameter mode?" by Jeremy Grifski
- "What is restores mode?" by Jeremy Grifski
- "What is a queue?" by Jeremy Grifski
- "What is a set?" by Jeremy Grifski
- "What is a stack?" by Jeremy Grifski
- "What does FIFO mean?" by Jeremy Grifski
- "What does LIFO mean?" by Jeremy Grifski
- "What is the object type of a variable?" by Kelvin Nguyen
- "What is an immutable type?" by Jacob Skarsten, Ziqing Zhao
- "What is replaces mode?" by Shaan Patel
- "What is updates mode?" by Colin Russel
- "Are arrays immutable or mutable?" by Jessica Molitor
- "What is inheritance?" by Xingzhi Dai
- "What is clears mode?" by Ethan Chilton
- "What is the default parameter mode when none is specified in the method contract?" by Dan Brace
- "What is the drawback and/or problem with aliasing?" by Michael Grady
- "What is a superclass?" by Ben Janita
- "Will you be my girlfriend?" by Ben Janita
- "What is an interface?" by Chenmeinian Guo, Tim Keck
- "Is testing an expensive waste of time?" by Jason Su
- "What is the purpose of the queue data structure?" by Ying Liang
- "What is Recursion?" by Gani Sagiev, Tim Keck
- "What is the difference between unit and integration testing?" by Jacob Kolaczkowski
- "What is the difference between testing and debugging?" by Ahmed Mohamed, John DiFilippo
- "What is object-oriented programming (OOP)?" by Felix Ji
- "What type of method is a JUnit test case?" by Matthew Alfieri
- "What is aliasing?" by Yuhang Huang
- "Is XMLTree a mutable or immutable type?" by Drishti Mittal
- "Is a string a mutable or immutable type?" by Grant McGeehen
- "What is the difference between copyFrom and transferFrom?" by Jashira Herrera Brito
- "What is the purpose of testing and what can it not prove?" by Nick Cheong
- "What does the method
.divide()
for NaturalNumber return?" by Kate Goertz - "What is the benefit of interval halving?" by Ashir Faruq
- "What is mathematical induction?" by Om Amin
- "What is the Set data type?" by Luke Thompson
- "What is the correct expression to see if an integer is odd in Java?" by Yi-You (Joseph) Chiu, Kurt Wanner
- "What is XML?" by Tim Keck
- "What is mutability?" by Tim Keck
- "What is a comparator?" by Tim Keck
- "What is a method contract?" by Tim Keck
- "How do I trace a variable through a recursive method?" by Tim Keck
- "What is the difference between a remainder and a modulus?" by Darrel Jobin
- "What are the four parameter modes?" by Darrel Jobin
- "What are NaturalNumberKernel's three methods?" by Alyssa Wiegman, Catherine Wu
- "What is a procedure?" by Amit Bharathan
- "What is the implementer's role?" by Daniel Han
- "What is the Standard interface?" by Andrew Nida
- "What are some ways to iterate over non-ordered data structures like sets?" by Josh Grismer
- "Is restores mode a default parameter mode?" by Allen Zhang
- "What is the difference between parameter and argument?" by Lucas Curran
- "What is the difference between an expression and a statement?" by Peter Sung
- "What is API?" by Yingqi Gao
- "What is a boolean?" by Oliver Gwynn
- "What is the difference between a public and private method?" by Sammy Schwartz
- "What is design by contract for?" by Darin Renusch
- "What is RSS?" by Andy Vong
- "What is the difference between inheritance and polymorphism?" by Jatin Mamtani
- "What is a precondition?" by Akshaya Iyer
- "What is short-circuit evaluation?" by Junbo Chen
- "What makes two if statements independent?" by Jarrett Reeves, Jeremy Grifski
- "What is polymorphism?" by Angstrom Sarkar
- "Why can't interfaces have constructors?" by Yingqi Gao
- "What is abstraction?" by Yingqi Gao
- "What is the difference between interface and abstract class?" by Yingqi Gao
- "When should I use newInstance?" by Shivam Engineer
- "What is an observer pattern?" by Jayshuk Pandrangi
- "What is a loop invariant?" by Jayshuk Pandrangi
- "What is MVC?" by Yuheng Long (Simon)
This README was automatically generated using SnakeMD.