jokes.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. //#SECTION dependency types
  2. /** All joke types */
  3. export type JokeType = "single" | "twopart";
  4. /** All joke categories (excluding aliases) */
  5. export type JokeCategory = "Misc" | "Programming" | "Dark" | "Pun" | "Spooky" | "Christmas";
  6. /** All blacklist flags */
  7. export interface JokeFlags {
  8. nsfw: boolean;
  9. racist: boolean;
  10. religious: boolean;
  11. political: boolean;
  12. sexist: boolean;
  13. explicit: boolean;
  14. }
  15. //#SECTION base interfaces
  16. /** Base interface for all kinds of jokes, internal or submission */
  17. declare interface JokeBase {
  18. category: JokeCategory;
  19. type: JokeType;
  20. flags: JokeFlags;
  21. }
  22. /** Base interface for internal jokes (ones that are saved to the local JSON files) */
  23. declare interface InternalJokeBase extends JokeBase {
  24. safe: boolean;
  25. id: number;
  26. }
  27. /** Base interface for joke submissions */
  28. declare interface SubmissionBase extends JokeBase {
  29. formatVersion: number;
  30. }
  31. //#SECTION internal jokes
  32. /** An internal joke of type `single` */
  33. export interface SingleJoke extends InternalJokeBase {
  34. type: "single";
  35. joke: string;
  36. }
  37. /** An internal joke of type `twopart` */
  38. export interface TwopartJoke extends InternalJokeBase {
  39. type: "twopart";
  40. setup: string;
  41. delivery: string;
  42. }
  43. /** An internal joke of any type */
  44. export type Joke = SingleJoke | TwopartJoke;
  45. /** Represents an internal joke file */
  46. export interface JokesFile {
  47. info: {
  48. formatVersion: number;
  49. }
  50. jokes: Joke[];
  51. }
  52. //#SECTION submissions
  53. /** A joke submission of type `single` */
  54. export interface JokeSubmissionSingle extends SubmissionBase {
  55. type: "single";
  56. joke: string;
  57. }
  58. /** A joke submission of type `twopart` */
  59. export interface JokeSubmissionTwopart extends SubmissionBase {
  60. type: "twopart";
  61. setup: string;
  62. delivery: string;
  63. }
  64. /** A joke submission of any type */
  65. export type JokeSubmission = JokeSubmissionSingle | JokeSubmissionTwopart;