From 335eb8c4ac3b5047452452aee47e8799446ebc45 Mon Sep 17 00:00:00 2001 From: Nathan Rashleigh Date: Mon, 8 Apr 2024 10:46:14 +1000 Subject: [PATCH] db --- alembic.ini | 118 + channel.json | 3913 ----------------- db/__init__.py | 4 + db/attachment.py | 15 + db/base.py | 3 + db/meme.py | 12 + db/migrate.py | 16 + idea.json | 1897 -------- image.py | 26 - main.py | 97 +- migrations/README | 1 + migrations/env.py | 86 + migrations/script.py.mako | 26 + ...feab_create_memes_and_attachments_table.py | 49 + requirements.txt | 6 +- uploader.py | 31 - 16 files changed, 370 insertions(+), 5930 deletions(-) create mode 100644 alembic.ini delete mode 100644 channel.json create mode 100644 db/__init__.py create mode 100644 db/attachment.py create mode 100644 db/base.py create mode 100644 db/meme.py create mode 100644 db/migrate.py delete mode 100644 idea.json delete mode 100644 image.py create mode 100644 migrations/README create mode 100644 migrations/env.py create mode 100644 migrations/script.py.mako create mode 100644 migrations/versions/e04bee35feab_create_memes_and_attachments_table.py delete mode 100644 uploader.py diff --git a/alembic.ini b/alembic.ini new file mode 100644 index 0000000..b0ed367 --- /dev/null +++ b/alembic.ini @@ -0,0 +1,118 @@ +# A generic, single database configuration. + +[dotenv] +dotenv_path = .env + +[alembic] +# path to migration scripts +script_location = migrations + +# template used to generate migration file names; The default value is %%(rev)s_%%(slug)s +# Uncomment the line below if you want the files to be prepended with date and time +# see https://alembic.sqlalchemy.org/en/latest/tutorial.html#editing-the-ini-file +# for all available tokens +# file_template = %%(year)d_%%(month).2d_%%(day).2d_%%(hour).2d%%(minute).2d-%%(rev)s_%%(slug)s + +# sys.path path, will be prepended to sys.path if present. +# defaults to the current working directory. +prepend_sys_path = . + +# timezone to use when rendering the date within the migration file +# as well as the filename. +# If specified, requires the python>=3.9 or backports.zoneinfo library. +# Any required deps can installed by adding `alembic[tz]` to the pip requirements +# string value is passed to ZoneInfo() +# leave blank for localtime +# timezone = + +# max length of characters to apply to the +# "slug" field +# truncate_slug_length = 40 + +# set to 'true' to run the environment during +# the 'revision' command, regardless of autogenerate +# revision_environment = false + +# set to 'true' to allow .pyc and .pyo files without +# a source .py file to be detected as revisions in the +# versions/ directory +# sourceless = false + +# version location specification; This defaults +# to migrations/versions. When using multiple version +# directories, initial revisions must be specified with --version-path. +# The path separator used here should be the separator specified by "version_path_separator" below. +# version_locations = %(here)s/bar:%(here)s/bat:migrations/versions + +# version path separator; As mentioned above, this is the character used to split +# version_locations. The default within new alembic.ini files is "os", which uses os.pathsep. +# If this key is omitted entirely, it falls back to the legacy behavior of splitting on spaces and/or commas. +# Valid values for version_path_separator are: +# +# version_path_separator = : +# version_path_separator = ; +# version_path_separator = space +version_path_separator = os # Use os.pathsep. Default configuration used for new projects. + +# set to 'true' to search source files recursively +# in each "version_locations" directory +# new in Alembic version 1.10 +# recursive_version_locations = false + +# the output encoding used when revision files +# are written from script.py.mako +# output_encoding = utf-8 + +sqlalchemy.url = driver://user:pass@localhost/dbname + +[post_write_hooks] +# post_write_hooks defines scripts or Python functions that are run +# on newly generated revision scripts. See the documentation for further +# detail and examples + +# format using "black" - use the console_scripts runner, against the "black" entrypoint +# hooks = black +# black.type = console_scripts +# black.entrypoint = black +# black.options = -l 79 REVISION_SCRIPT_FILENAME + +# lint with attempts to fix using "ruff" - use the exec runner, execute a binary +# hooks = ruff +# ruff.type = exec +# ruff.executable = %(here)s/.venv/bin/ruff +# ruff.options = --fix REVISION_SCRIPT_FILENAME + +# Logging configuration +[loggers] +keys = root,sqlalchemy,alembic + +[handlers] +keys = console + +[formatters] +keys = generic + +[logger_root] +level = WARN +handlers = console +qualname = + +[logger_sqlalchemy] +level = WARN +handlers = +qualname = sqlalchemy.engine + +[logger_alembic] +level = INFO +handlers = +qualname = alembic + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatter_generic] +format = %(levelname)-5.5s [%(name)s] %(message)s +datefmt = %H:%M:%S diff --git a/channel.json b/channel.json deleted file mode 100644 index 144383e..0000000 --- a/channel.json +++ /dev/null @@ -1,3913 +0,0 @@ -[ - { - "id": "1219508602687979570", - "type": 19, - "content": "i wish you luck on your upcoming abstract existence as a stoic master-mentality practicing insect", - "channel_id": "367936426962190336", - "author": - { - "id": "184984739847864320", - "username": "ntr808", - "avatar": "e9ffc922be49f3d64f58dc3fdeede7b6", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "ntr", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [ - { - "id": "461952652750618645", - "username": "rake6062", - "avatar": "1c12ea775f9219abc4a71105ae041c56", - "discriminator": "0", - "public_flags": 256, - "premium_type": 0, - "flags": 256, - "banner": null, - "accent_color": null, - "global_name": "Rake", - "avatar_decoration_data": null, - "banner_color": null - } - ], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-19T04:51:48.255000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1219507171809824829", - "guild_id": "239638846688460802" - }, - "referenced_message": - { - "id": "1219507171809824829", - "type": 19, - "content": "I am going to physically eat these", - "channel_id": "367936426962190336", - "author": - { - "id": "461952652750618645", - "username": "rake6062", - "avatar": "1c12ea775f9219abc4a71105ae041c56", - "discriminator": "0", - "public_flags": 256, - "premium_type": 0, - "flags": 256, - "banner": null, - "accent_color": null, - "global_name": "Rake", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [ - { - "id": "184984739847864320", - "username": "ntr808", - "avatar": "e9ffc922be49f3d64f58dc3fdeede7b6", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "ntr", - "avatar_decoration_data": null, - "banner_color": null - } - ], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-19T04:46:07.107000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1219507108131770368", - "guild_id": "239638846688460802" - } - } - }, - { - "id": "1219507171809824829", - "type": 19, - "content": "I am going to physically eat these", - "channel_id": "367936426962190336", - "author": - { - "id": "461952652750618645", - "username": "rake6062", - "avatar": "1c12ea775f9219abc4a71105ae041c56", - "discriminator": "0", - "public_flags": 256, - "premium_type": 0, - "flags": 256, - "banner": null, - "accent_color": null, - "global_name": "Rake", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [ - { - "id": "184984739847864320", - "username": "ntr808", - "avatar": "e9ffc922be49f3d64f58dc3fdeede7b6", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "ntr", - "avatar_decoration_data": null, - "banner_color": null - } - ], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-19T04:46:07.107000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1219507108131770368", - "guild_id": "239638846688460802" - }, - "referenced_message": - { - "id": "1219507108131770368", - "type": 19, - "content": "<:wojcry:966237181121298462>", - "channel_id": "367936426962190336", - "author": - { - "id": "184984739847864320", - "username": "ntr808", - "avatar": "e9ffc922be49f3d64f58dc3fdeede7b6", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "ntr", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1219507107808940092", - "filename": "IMG_2625.jpg", - "size": 1702808, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1219507107808940092/IMG_2625.jpg?ex=660b8d7f&is=65f9187f&hm=b185ecf29001c715b284447d1eb6be0b38fbd3e8c19185b94deaba26b0a87185&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1219507107808940092/IMG_2625.jpg?ex=660b8d7f&is=65f9187f&hm=b185ecf29001c715b284447d1eb6be0b38fbd3e8c19185b94deaba26b0a87185&", - "width": 4032, - "height": 3024, - "content_type": "image/jpeg", - "content_scan_version": 1, - "placeholder": "nRgGFYLfLXiJqnNdTEVVjJJgSwen", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [ - { - "id": "461952652750618645", - "username": "rake6062", - "avatar": "1c12ea775f9219abc4a71105ae041c56", - "discriminator": "0", - "public_flags": 256, - "premium_type": 0, - "flags": 256, - "banner": null, - "accent_color": null, - "global_name": "Rake", - "avatar_decoration_data": null, - "banner_color": null - } - ], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-19T04:45:51.925000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1219500770840281199", - "guild_id": "239638846688460802" - } - } - }, - { - "id": "1219507108131770368", - "type": 19, - "content": "<:wojcry:966237181121298462>", - "channel_id": "367936426962190336", - "author": - { - "id": "184984739847864320", - "username": "ntr808", - "avatar": "e9ffc922be49f3d64f58dc3fdeede7b6", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "ntr", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1219507107808940092", - "filename": "IMG_2625.jpg", - "size": 1702808, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1219507107808940092/IMG_2625.jpg?ex=660b8d7f&is=65f9187f&hm=b185ecf29001c715b284447d1eb6be0b38fbd3e8c19185b94deaba26b0a87185&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1219507107808940092/IMG_2625.jpg?ex=660b8d7f&is=65f9187f&hm=b185ecf29001c715b284447d1eb6be0b38fbd3e8c19185b94deaba26b0a87185&", - "width": 4032, - "height": 3024, - "content_type": "image/jpeg", - "content_scan_version": 1, - "placeholder": "nRgGFYLfLXiJqnNdTEVVjJJgSwen", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [ - { - "id": "461952652750618645", - "username": "rake6062", - "avatar": "1c12ea775f9219abc4a71105ae041c56", - "discriminator": "0", - "public_flags": 256, - "premium_type": 0, - "flags": 256, - "banner": null, - "accent_color": null, - "global_name": "Rake", - "avatar_decoration_data": null, - "banner_color": null - } - ], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-19T04:45:51.925000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1219500770840281199", - "guild_id": "239638846688460802" - }, - "referenced_message": - { - "id": "1219500770840281199", - "type": 0, - "content": "4 course meal", - "channel_id": "367936426962190336", - "author": - { - "id": "461952652750618645", - "username": "rake6062", - "avatar": "1c12ea775f9219abc4a71105ae041c56", - "discriminator": "0", - "public_flags": 256, - "premium_type": 0, - "flags": 256, - "banner": null, - "accent_color": null, - "global_name": "Rake", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1219500770391621723", - "filename": "IMG_4150.png", - "size": 2579604, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1219500770391621723/IMG_4150.png?ex=660b8798&is=65f91298&hm=a5c99b9df58c09fc011872210596c28d27ec87e2c70275c466401e7a0c004b6d&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1219500770391621723/IMG_4150.png?ex=660b8798&is=65f91298&hm=a5c99b9df58c09fc011872210596c28d27ec87e2c70275c466401e7a0c004b6d&", - "width": 2206, - "height": 922, - "content_type": "image/png", - "content_scan_version": 1, - "placeholder": "mBgGG4Lsapb/lYZWz5v7r6o=", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-19T04:20:40.997000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - } - }, - { - "id": "1219500770840281199", - "type": 0, - "content": "4 course meal", - "channel_id": "367936426962190336", - "author": - { - "id": "461952652750618645", - "username": "rake6062", - "avatar": "1c12ea775f9219abc4a71105ae041c56", - "discriminator": "0", - "public_flags": 256, - "premium_type": 0, - "flags": 256, - "banner": null, - "accent_color": null, - "global_name": "Rake", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1219500770391621723", - "filename": "IMG_4150.png", - "size": 2579604, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1219500770391621723/IMG_4150.png?ex=660b8798&is=65f91298&hm=a5c99b9df58c09fc011872210596c28d27ec87e2c70275c466401e7a0c004b6d&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1219500770391621723/IMG_4150.png?ex=660b8798&is=65f91298&hm=a5c99b9df58c09fc011872210596c28d27ec87e2c70275c466401e7a0c004b6d&", - "width": 2206, - "height": 922, - "content_type": "image/png", - "content_scan_version": 1, - "placeholder": "mBgGG4Lsapb/lYZWz5v7r6o=", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-19T04:20:40.997000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "reactions": - [ - { - "emoji": - { - "id": null, - "name": "πŸ˜‹" - }, - "count": 1, - "count_details": - { - "burst": 0, - "normal": 1 - }, - "burst_colors": - [], - "me_burst": false, - "burst_me": false, - "me": false, - "burst_count": 0 - } - ] - }, - { - "id": "1219491427482992692", - "type": 0, - "content": "Oh...", - "channel_id": "367936426962190336", - "author": - { - "id": "773412011945885707", - "username": "k_rp", - "avatar": "df23ab49e39a1c7e52a50aa25ac5786d", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "kerp", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-19T03:43:33.367000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "reactions": - [ - { - "emoji": - { - "id": "1006852557798383726", - "name": "kekw" - }, - "count": 2, - "count_details": - { - "burst": 0, - "normal": 2 - }, - "burst_colors": - [], - "me_burst": false, - "burst_me": false, - "me": false, - "burst_count": 0 - } - ] - }, - { - "id": "1219491028310954115", - "type": 19, - "content": "Looks like the unix fork tree", - "channel_id": "367936426962190336", - "author": - { - "id": "773412011945885707", - "username": "k_rp", - "avatar": "df23ab49e39a1c7e52a50aa25ac5786d", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "kerp", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [ - { - "id": "576527365463605262", - "username": "fellatioustheheadsman", - "avatar": "f964985c4f9dff1479d757add21ec253", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Fellatious the Headsman", - "avatar_decoration_data": null, - "banner_color": null - } - ], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-19T03:41:58.197000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1219404326896664668", - "guild_id": "239638846688460802" - }, - "referenced_message": - { - "id": "1219404326896664668", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "576527365463605262", - "username": "fellatioustheheadsman", - "avatar": "f964985c4f9dff1479d757add21ec253", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Fellatious the Headsman", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1219404326569639956", - "filename": "mdp9ZcA.png", - "size": 3671158, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1219404326569639956/mdp9ZcA.png?ex=660b2dc6&is=65f8b8c6&hm=5ed0fe2e3be43b6323f93be26b2b0c7fbf46bfb61e5b3db066610a18c1aca582&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1219404326569639956/mdp9ZcA.png?ex=660b2dc6&is=65f8b8c6&hm=5ed0fe2e3be43b6323f93be26b2b0c7fbf46bfb61e5b3db066610a18c1aca582&", - "width": 2020, - "height": 2328, - "content_type": "image/png", - "content_scan_version": 1, - "placeholder": "OQgGBgB92jRauERqpsBlpUV4UGULeDg=", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T21:57:26.969000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - } - }, - { - "id": "1219449179533869116", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "279029326870216704", - "username": "1001plateaus", - "avatar": "b47eb91bdbb8c27a15b8811cbdbb221f", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "1001plateaus", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1219449179328217219", - "filename": "IMG_4151.jpg", - "size": 105128, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1219449179328217219/IMG_4151.jpg?ex=660b578c&is=65f8e28c&hm=8d9a21f33fd91919a56526c127b62b9317b551c049bb7c71c8ec0460b06c0f0e&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1219449179328217219/IMG_4151.jpg?ex=660b578c&is=65f8e28c&hm=8d9a21f33fd91919a56526c127b62b9317b551c049bb7c71c8ec0460b06c0f0e&", - "width": 425, - "height": 1590, - "content_type": "image/jpeg", - "content_scan_version": 1, - "placeholder": "lzgCGgKk7K+bEMxDB3eHUJg=", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-19T00:55:40.671000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - }, - { - "id": "1219446073207160843", - "type": 19, - "content": "did you buy that?? 😭", - "channel_id": "367936426962190336", - "author": - { - "id": "461952652750618645", - "username": "rake6062", - "avatar": "1c12ea775f9219abc4a71105ae041c56", - "discriminator": "0", - "public_flags": 256, - "premium_type": 0, - "flags": 256, - "banner": null, - "accent_color": null, - "global_name": "Rake", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [ - { - "id": "471130659889610763", - "username": "kylelynn", - "avatar": "320af56573cdf535d5198d50697f4316", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": null, - "avatar_decoration_data": null, - "banner_color": null - } - ], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-19T00:43:20.065000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1219432636771209276", - "guild_id": "239638846688460802" - }, - "referenced_message": - { - "id": "1219432636771209276", - "type": 0, - "content": "What the fuck is wrong with me", - "channel_id": "367936426962190336", - "author": - { - "id": "471130659889610763", - "username": "kylelynn", - "avatar": "320af56573cdf535d5198d50697f4316", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": null, - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1219432636481540116", - "filename": "20240318_164511.jpg", - "size": 1358950, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1219432636481540116/20240318_164511.jpg?ex=660b4824&is=65f8d324&hm=6f07baf9838005675af4e95221d6af0c29406bc5556ae368a8a4bf724120bfe6&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1219432636481540116/20240318_164511.jpg?ex=660b4824&is=65f8d324&hm=6f07baf9838005675af4e95221d6af0c29406bc5556ae368a8a4bf724120bfe6&", - "width": 3120, - "height": 4160, - "content_type": "image/jpeg", - "content_scan_version": 1, - "placeholder": "YPkJHQT3pWx3uHaHZ4d3iCZgAxt7", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T23:49:56.569000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - } - }, - { - "id": "1219432636771209276", - "type": 0, - "content": "What the fuck is wrong with me", - "channel_id": "367936426962190336", - "author": - { - "id": "471130659889610763", - "username": "kylelynn", - "avatar": "320af56573cdf535d5198d50697f4316", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": null, - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1219432636481540116", - "filename": "20240318_164511.jpg", - "size": 1358950, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1219432636481540116/20240318_164511.jpg?ex=660b4824&is=65f8d324&hm=6f07baf9838005675af4e95221d6af0c29406bc5556ae368a8a4bf724120bfe6&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1219432636481540116/20240318_164511.jpg?ex=660b4824&is=65f8d324&hm=6f07baf9838005675af4e95221d6af0c29406bc5556ae368a8a4bf724120bfe6&", - "width": 3120, - "height": 4160, - "content_type": "image/jpeg", - "content_scan_version": 1, - "placeholder": "YPkJHQT3pWx3uHaHZ4d3iCZgAxt7", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T23:49:56.569000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "reactions": - [ - { - "emoji": - { - "id": "966237181121298462", - "name": "wojcry" - }, - "count": 2, - "count_details": - { - "burst": 0, - "normal": 2 - }, - "burst_colors": - [], - "me_burst": false, - "burst_me": false, - "me": true, - "burst_count": 0 - }, - { - "emoji": - { - "id": "617512354787229696", - "name": "nyanlewdthoughts", - "animated": true - }, - "count": 3, - "count_details": - { - "burst": 0, - "normal": 3 - }, - "burst_colors": - [], - "me_burst": false, - "burst_me": false, - "me": true, - "burst_count": 0 - }, - { - "emoji": - { - "id": "1006852557798383726", - "name": "kekw" - }, - "count": 1, - "count_details": - { - "burst": 0, - "normal": 1 - }, - "burst_colors": - [], - "me_burst": false, - "burst_me": false, - "me": false, - "burst_count": 0 - } - ] - }, - { - "id": "1219429233563009164", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "371782531315662848", - "username": "azathoth.", - "avatar": "a_f4ade21ecd877cebc7fd9eae22a111ac", - "discriminator": "0", - "public_flags": 0, - "premium_type": 2, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Azathoth", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1219429233055629312", - "filename": "IMG_4527.jpg", - "size": 54795, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1219429233055629312/IMG_4527.jpg?ex=660b44f9&is=65f8cff9&hm=2b03d10e492070965136f9303f6e337072560817536bbe18f631da75fc9cbbc8&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1219429233055629312/IMG_4527.jpg?ex=660b44f9&is=65f8cff9&hm=2b03d10e492070965136f9303f6e337072560817536bbe18f631da75fc9cbbc8&", - "width": 680, - "height": 676, - "content_type": "image/jpeg", - "content_scan_version": 1, - "placeholder": "HQgOD4D7yKeod3had1Z212h4+7t4j3oA", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T23:36:25.181000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - }, - { - "id": "1219415242275029033", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "371782531315662848", - "username": "azathoth.", - "avatar": "a_f4ade21ecd877cebc7fd9eae22a111ac", - "discriminator": "0", - "public_flags": 0, - "premium_type": 2, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Azathoth", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1219415241901867009", - "filename": "IMG_4524.png", - "size": 287455, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1219415241901867009/IMG_4524.png?ex=660b37f1&is=65f8c2f1&hm=a45a9f77b1aeab3ca6ab78bf9f267184e4e8e3c659844f5f397b92e202663255&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1219415241901867009/IMG_4524.png?ex=660b37f1&is=65f8c2f1&hm=a45a9f77b1aeab3ca6ab78bf9f267184e4e8e3c659844f5f397b92e202663255&", - "width": 1125, - "height": 845, - "content_type": "image/jpeg", - "content_scan_version": 1, - "placeholder": "OQgGBYCa9HeFaJl5eFiIjaDUBDdJ", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T22:40:49.398000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "reactions": - [ - { - "emoji": - { - "id": "1006852557798383726", - "name": "kekw" - }, - "count": 5, - "count_details": - { - "burst": 0, - "normal": 5 - }, - "burst_colors": - [], - "me_burst": false, - "burst_me": false, - "me": false, - "burst_count": 0 - } - ] - }, - { - "id": "1219404326896664668", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "576527365463605262", - "username": "fellatioustheheadsman", - "avatar": "f964985c4f9dff1479d757add21ec253", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Fellatious the Headsman", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1219404326569639956", - "filename": "mdp9ZcA.png", - "size": 3671158, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1219404326569639956/mdp9ZcA.png?ex=660b2dc6&is=65f8b8c6&hm=5ed0fe2e3be43b6323f93be26b2b0c7fbf46bfb61e5b3db066610a18c1aca582&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1219404326569639956/mdp9ZcA.png?ex=660b2dc6&is=65f8b8c6&hm=5ed0fe2e3be43b6323f93be26b2b0c7fbf46bfb61e5b3db066610a18c1aca582&", - "width": 2020, - "height": 2328, - "content_type": "image/png", - "content_scan_version": 1, - "placeholder": "OQgGBgB92jRauERqpsBlpUV4UGULeDg=", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T21:57:26.969000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "reactions": - [ - { - "emoji": - { - "id": "967055895810949161", - "name": "wojpog" - }, - "count": 4, - "count_details": - { - "burst": 0, - "normal": 4 - }, - "burst_colors": - [], - "me_burst": false, - "burst_me": false, - "me": false, - "burst_count": 0 - } - ] - }, - { - "id": "1219387313000288386", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "471130659889610763", - "username": "kylelynn", - "avatar": "320af56573cdf535d5198d50697f4316", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": null, - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1219387312753082448", - "filename": "432940279_733371855648360_116983049949734478_n.png", - "size": 122295, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1219387312753082448/432940279_733371855648360_116983049949734478_n.png?ex=660b1dee&is=65f8a8ee&hm=61e995528bb687b8e9a4975dcfb91ae257c80f921f59e4feade4d9a384790c55&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1219387312753082448/432940279_733371855648360_116983049949734478_n.png?ex=660b1dee&is=65f8a8ee&hm=61e995528bb687b8e9a4975dcfb91ae257c80f921f59e4feade4d9a384790c55&", - "width": 500, - "height": 285, - "content_type": "image/png", - "content_scan_version": 1, - "placeholder": "xgcGBIAYVleoeHiQimdAI/TdjQ==", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T20:49:50.540000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "reactions": - [ - { - "emoji": - { - "id": null, - "name": "😒" - }, - "count": 6, - "count_details": - { - "burst": 0, - "normal": 6 - }, - "burst_colors": - [], - "me_burst": false, - "burst_me": false, - "me": true, - "burst_count": 0 - } - ] - }, - { - "id": "1219381914461274132", - "type": 0, - "content": "https://cdn.discordapp.com/attachments/393430825888251915/1219381710010191942/facebook_1710793613162_7175588494867836993.jpg", - "channel_id": "367936426962190336", - "author": - { - "id": "231234227847299072", - "username": "nomar5331", - "avatar": "ec28ce33fd1293c40cb25bb3794703e4", - "discriminator": "0", - "public_flags": 128, - "premium_type": 0, - "flags": 128, - "banner": null, - "accent_color": null, - "global_name": "nomar", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [ - { - "type": "image", - "url": "https://cdn.discordapp.com/attachments/393430825888251915/1219381710010191942/facebook_1710793613162_7175588494867836993.jpg", - "thumbnail": - { - "url": "https://cdn.discordapp.com/attachments/393430825888251915/1219381710010191942/facebook_1710793613162_7175588494867836993.jpg?ex=660b18b6&is=65f8a3b6&hm=6e3c175c807a39e9fbb717b5aa69f55c1cecb4210952a89839c160a12d644303&", - "proxy_url": "https://media.discordapp.net/attachments/393430825888251915/1219381710010191942/facebook_1710793613162_7175588494867836993.jpg?ex=660b18b6&is=65f8a3b6&hm=6e3c175c807a39e9fbb717b5aa69f55c1cecb4210952a89839c160a12d644303&", - "width": 624, - "height": 751, - "placeholder": "UCgKHgQHNjmZh2aHiHiHh5iYNYBFAEg=", - "placeholder_version": 1 - }, - "content_scan_version": 1 - } - ], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T20:28:23.428000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - }, - { - "id": "1219380671403790356", - "type": 19, - "content": "can this be an emoji?", - "channel_id": "367936426962190336", - "author": - { - "id": "408621794958770196", - "username": "frilly.cats.tea", - "avatar": "a56b23758131111d135a119a086b240f", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "xXJimmyBuffettsimpXx", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [ - { - "id": "471130659889610763", - "username": "kylelynn", - "avatar": "320af56573cdf535d5198d50697f4316", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": null, - "avatar_decoration_data": null, - "banner_color": null - } - ], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T20:23:27.060000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1219378118071156828", - "guild_id": "239638846688460802" - }, - "referenced_message": - { - "id": "1219378118071156828", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "471130659889610763", - "username": "kylelynn", - "avatar": "320af56573cdf535d5198d50697f4316", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": null, - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1219378118238670848", - "filename": "433360586_814827420686243_2295220772939066320_n.png", - "size": 795345, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1219378118238670848/433360586_814827420686243_2295220772939066320_n.png?ex=660b155e&is=65f8a05e&hm=011c1b60abf5793a926824169a726bf2501fbb6534f7dfd9ef23935ee10d155a&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1219378118238670848/433360586_814827420686243_2295220772939066320_n.png?ex=660b155e&is=65f8a05e&hm=011c1b60abf5793a926824169a726bf2501fbb6534f7dfd9ef23935ee10d155a&", - "width": 940, - "height": 704, - "content_type": "image/png", - "content_scan_version": 1, - "placeholder": "4pYFHYgEmLeraHeYfSVqZ/vDpW95", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T20:13:18.298000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - } - }, - { - "id": "1219378118071156828", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "471130659889610763", - "username": "kylelynn", - "avatar": "320af56573cdf535d5198d50697f4316", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": null, - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1219378118238670848", - "filename": "433360586_814827420686243_2295220772939066320_n.png", - "size": 795345, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1219378118238670848/433360586_814827420686243_2295220772939066320_n.png?ex=660b155e&is=65f8a05e&hm=011c1b60abf5793a926824169a726bf2501fbb6534f7dfd9ef23935ee10d155a&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1219378118238670848/433360586_814827420686243_2295220772939066320_n.png?ex=660b155e&is=65f8a05e&hm=011c1b60abf5793a926824169a726bf2501fbb6534f7dfd9ef23935ee10d155a&", - "width": 940, - "height": 704, - "content_type": "image/png", - "content_scan_version": 1, - "placeholder": "4pYFHYgEmLeraHeYfSVqZ/vDpW95", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T20:13:18.298000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "reactions": - [ - { - "emoji": - { - "id": null, - "name": "❀️" - }, - "count": 1, - "count_details": - { - "burst": 0, - "normal": 1 - }, - "burst_colors": - [], - "me_burst": false, - "burst_me": false, - "me": false, - "burst_count": 0 - } - ] - }, - { - "id": "1219357447031095447", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "371782531315662848", - "username": "azathoth.", - "avatar": "a_f4ade21ecd877cebc7fd9eae22a111ac", - "discriminator": "0", - "public_flags": 0, - "premium_type": 2, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Azathoth", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1219357446796083210", - "filename": "IMG_4514.png", - "size": 420228, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1219357446796083210/IMG_4514.png?ex=660b021d&is=65f88d1d&hm=43418e8eeb58aab40a8e24f221180ac1a4cb6b5a13dcfb1eb276d38762db9994&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1219357446796083210/IMG_4514.png?ex=660b021d&is=65f88d1d&hm=43418e8eeb58aab40a8e24f221180ac1a4cb6b5a13dcfb1eb276d38762db9994&", - "width": 640, - "height": 562, - "content_type": "image/jpeg", - "content_scan_version": 1, - "placeholder": "JZYFHohIeoiPnHZwh9mImGh6N2COBOc=", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T18:51:09.938000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "reactions": - [ - { - "emoji": - { - "id": null, - "name": "❀️" - }, - "count": 1, - "count_details": - { - "burst": 0, - "normal": 1 - }, - "burst_colors": - [], - "me_burst": false, - "burst_me": false, - "me": false, - "burst_count": 0 - } - ] - }, - { - "id": "1219323509084262551", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "1118288537289240717", - "username": "estuarion", - "avatar": "9a7a7582cd814a6f8d16e19be6904288", - "discriminator": "0", - "public_flags": 0, - "premium_type": 2, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Estuarion", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1219323508895645848", - "filename": "20240309_072323.jpg", - "size": 99356, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1219323508895645848/20240309_072323.jpg?ex=660ae282&is=65f86d82&hm=4b7a9ca91a51dddf577d5c0f0dd942c32abaca32d1e0bd36a4023615a9c7517d&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1219323508895645848/20240309_072323.jpg?ex=660ae282&is=65f86d82&hm=4b7a9ca91a51dddf577d5c0f0dd942c32abaca32d1e0bd36a4023615a9c7517d&", - "width": 640, - "height": 1138, - "content_type": "image/jpeg", - "content_scan_version": 1, - "placeholder": "JNgJHAYJh4kKiWfWZYhyQBkGZA==", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T16:36:18.501000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "reactions": - [ - { - "emoji": - { - "id": "367986527671812098", - "name": "zyzz" - }, - "count": 7, - "count_details": - { - "burst": 0, - "normal": 7 - }, - "burst_colors": - [], - "me_burst": false, - "burst_me": false, - "me": true, - "burst_count": 0 - }, - { - "emoji": - { - "id": "1006852557798383726", - "name": "kekw" - }, - "count": 3, - "count_details": - { - "burst": 0, - "normal": 3 - }, - "burst_colors": - [], - "me_burst": false, - "burst_me": false, - "me": false, - "burst_count": 0 - } - ] - }, - { - "id": "1219260074153738250", - "type": 0, - "content": "🀿πŸͺ˜πŸ’¨", - "channel_id": "367936426962190336", - "author": - { - "id": "218821077034467338", - "username": "musculus", - "avatar": "aa1d9c6e12ffcf0b9a81c42083bc8f0f", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Musculus", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T12:24:14.435000+00:00", - "edited_timestamp": "2024-03-18T12:30:37.031000+00:00", - "flags": 0, - "components": - [] - }, - { - "id": "1219254448816128030", - "type": 0, - "content": "https://cdn.discordapp.com/attachments/393430825888251915/1219254252245880862/-5170200550988426465_121.jpg", - "channel_id": "367936426962190336", - "author": - { - "id": "231234227847299072", - "username": "nomar5331", - "avatar": "ec28ce33fd1293c40cb25bb3794703e4", - "discriminator": "0", - "public_flags": 128, - "premium_type": 0, - "flags": 128, - "banner": null, - "accent_color": null, - "global_name": "nomar", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [ - { - "type": "image", - "url": "https://cdn.discordapp.com/attachments/393430825888251915/1219254252245880862/-5170200550988426465_121.jpg", - "thumbnail": - { - "url": "https://cdn.discordapp.com/attachments/393430825888251915/1219254252245880862/-5170200550988426465_121.jpg?ex=660aa202&is=65f82d02&hm=9cd14d776c9ab533dcd4af07bb8f3260f54bc4c30bea670e99da9b2e03c93b6e&", - "proxy_url": "https://media.discordapp.net/attachments/393430825888251915/1219254252245880862/-5170200550988426465_121.jpg?ex=660aa202&is=65f82d02&hm=9cd14d776c9ab533dcd4af07bb8f3260f54bc4c30bea670e99da9b2e03c93b6e&", - "width": 851, - "height": 720, - "placeholder": "KEgKHorIVmmplYiPkyh4WGmBCXWSQCc=", - "placeholder_version": 1 - }, - "content_scan_version": 1 - } - ], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T12:01:53.250000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "reactions": - [ - { - "emoji": - { - "id": "897383498678157312", - "name": "soypoint2" - }, - "count": 4, - "count_details": - { - "burst": 0, - "normal": 4 - }, - "burst_colors": - [], - "me_burst": false, - "burst_me": false, - "me": false, - "burst_count": 0 - } - ] - }, - { - "id": "1219252383788564551", - "type": 0, - "content": "The shot specifically comes from the movie Kingdom of heaven", - "channel_id": "367936426962190336", - "author": - { - "id": "218821077034467338", - "username": "musculus", - "avatar": "aa1d9c6e12ffcf0b9a81c42083bc8f0f", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Musculus", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T11:53:40.909000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - }, - { - "id": "1219249832582185020", - "type": 19, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "505353587174408193", - "username": "tgcharlet", - "avatar": "e800ffab640eb8684020054301668f79", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Chehrlet", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1219249832393183302", - "filename": "cover4_1.jpg", - "size": 121244, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1219249832393183302/cover4_1.jpg?ex=660a9de4&is=65f828e4&hm=8d8f54993cced019d7e81814d4e01cfb94a75983aa9ddbe47b4b48acc250ab17&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1219249832393183302/cover4_1.jpg?ex=660a9de4&is=65f828e4&hm=8d8f54993cced019d7e81814d4e01cfb94a75983aa9ddbe47b4b48acc250ab17&", - "width": 1920, - "height": 1080, - "content_type": "image/jpeg", - "content_scan_version": 1, - "placeholder": "lNcJFIRCimZlp3l9hnBbcMYN2Q==", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [ - { - "id": "1118288537289240717", - "username": "estuarion", - "avatar": "9a7a7582cd814a6f8d16e19be6904288", - "discriminator": "0", - "public_flags": 0, - "premium_type": 2, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Estuarion", - "avatar_decoration_data": null, - "banner_color": null - } - ], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T11:43:32.654000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1219074202062028800", - "guild_id": "239638846688460802" - }, - "referenced_message": - { - "id": "1219074202062028800", - "type": 19, - "content": "The City of God", - "channel_id": "367936426962190336", - "author": - { - "id": "1118288537289240717", - "username": "estuarion", - "avatar": "9a7a7582cd814a6f8d16e19be6904288", - "discriminator": "0", - "public_flags": 0, - "premium_type": 2, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Estuarion", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [ - { - "id": "505353587174408193", - "username": "tgcharlet", - "avatar": "e800ffab640eb8684020054301668f79", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Chehrlet", - "avatar_decoration_data": null, - "banner_color": null - } - ], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T00:05:39.075000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1218974428403077121", - "guild_id": "239638846688460802" - } - } - }, - { - "id": "1219187021830946927", - "type": 19, - "content": "Autistic discourse", - "channel_id": "367936426962190336", - "author": - { - "id": "999683583654506566", - "username": "susoland", - "avatar": "a_867237379efa3aa980bce83016d6de3d", - "discriminator": "0", - "public_flags": 0, - "premium_type": 2, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "susoland", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [ - { - "id": "371782531315662848", - "username": "azathoth.", - "avatar": "a_f4ade21ecd877cebc7fd9eae22a111ac", - "discriminator": "0", - "public_flags": 0, - "premium_type": 2, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Azathoth", - "avatar_decoration_data": null, - "banner_color": null - } - ], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T07:33:57.404000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1217827633031676024", - "guild_id": "239638846688460802" - }, - "referenced_message": - { - "id": "1217827633031676024", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "371782531315662848", - "username": "azathoth.", - "avatar": "a_f4ade21ecd877cebc7fd9eae22a111ac", - "discriminator": "0", - "public_flags": 0, - "premium_type": 2, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Azathoth", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1217827632855650455", - "filename": "IMG_4997.jpg", - "size": 124060, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1217827632855650455/IMG_4997.jpg?ex=6605715d&is=65f2fc5d&hm=f190150e30daee105b7a9230623b5e20ea5c73c28cb74638630fcfe7719e7dfd&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1217827632855650455/IMG_4997.jpg?ex=6605715d&is=65f2fc5d&hm=f190150e30daee105b7a9230623b5e20ea5c73c28cb74638630fcfe7719e7dfd&", - "width": 720, - "height": 892, - "content_type": "image/jpeg", - "content_scan_version": 1, - "placeholder": "MAgSBgCJhviHeEeIeHuIhneHdsRPCPs=", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-14T13:32:13.858000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - } - }, - { - "id": "1219171340356161597", - "type": 0, - "content": "Hop on darkest dungeon", - "channel_id": "367936426962190336", - "author": - { - "id": "218821077034467338", - "username": "musculus", - "avatar": "aa1d9c6e12ffcf0b9a81c42083bc8f0f", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Musculus", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T06:31:38.649000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - }, - { - "id": "1219171300761800764", - "type": 19, - "content": "https://tenor.com/view/darkest-dungeon-gif-13289659", - "channel_id": "367936426962190336", - "author": - { - "id": "218821077034467338", - "username": "musculus", - "avatar": "aa1d9c6e12ffcf0b9a81c42083bc8f0f", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Musculus", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [ - { - "type": "gifv", - "url": "https://tenor.com/view/darkest-dungeon-gif-13289659", - "reference_id": "1219171300761800764", - "provider": - { - "name": "Tenor", - "url": "https://tenor.co" - }, - "thumbnail": - { - "url": "https://media.tenor.com/wBf7-unCiI0AAAAe/darkest-dungeon.png", - "proxy_url": "https://images-ext-2.discordapp.net/external/zSXxUVSv9jVW2TWuFO49DkyvDaHjbAAvxxa7VABK_kw/https/media.tenor.com/wBf7-unCiI0AAAAe/darkest-dungeon.png", - "width": 400, - "height": 300, - "placeholder": "yDgGFYIJdWrFRYtImTeHdnXx+pZM", - "placeholder_version": 1 - }, - "video": - { - "url": "https://media.tenor.com/wBf7-unCiI0AAAPo/darkest-dungeon.mp4", - "proxy_url": "https://images-ext-2.discordapp.net/external/80xTKYs6z5e9KPGY7ZdyJPinfmUGOKJkSGGYCoeW93s/https/media.tenor.com/wBf7-unCiI0AAAPo/darkest-dungeon.mp4", - "width": 400, - "height": 300, - "placeholder": "yDgGFYIJdWrFRYtImTeHdnXx+pZM", - "placeholder_version": 1 - }, - "content_scan_version": 1 - } - ], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T06:31:29.209000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1218974428403077121", - "guild_id": "239638846688460802" - }, - "referenced_message": - { - "id": "1218974428403077121", - "type": 19, - "content": "What's on the bottom? Something crusade-related maybe, given the cross?", - "channel_id": "367936426962190336", - "author": - { - "id": "505353587174408193", - "username": "tgcharlet", - "avatar": "e800ffab640eb8684020054301668f79", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Chehrlet", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [ - { - "id": "1118288537289240717", - "username": "estuarion", - "avatar": "9a7a7582cd814a6f8d16e19be6904288", - "discriminator": "0", - "public_flags": 0, - "premium_type": 2, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Estuarion", - "avatar_decoration_data": null, - "banner_color": null - } - ], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T17:29:11.181000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1218715853378424962", - "guild_id": "239638846688460802" - } - } - }, - { - "id": "1219168615480295444", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "265841512250736640", - "username": "brom.unculi", - "avatar": "1384a86544f008ed731ab1d8c3aeaa87", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": null, - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1219168615069388862", - "filename": "GI5rLWNXUAAhZan.png", - "size": 682332, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1219168615069388862/GI5rLWNXUAAhZan.png?ex=660a5240&is=65f7dd40&hm=31a6b7fa961ae226639d58c943554eb14819a2bfe10101fb132e88f03a096fc9&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1219168615069388862/GI5rLWNXUAAhZan.png?ex=660a5240&is=65f7dd40&hm=31a6b7fa961ae226639d58c943554eb14819a2bfe10101fb132e88f03a096fc9&", - "width": 1080, - "height": 969, - "content_type": "image/png", - "content_scan_version": 1, - "placeholder": "9AcKFoT5l2dtkXl8aXaoWYqVYFUHiRY=", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T06:20:48.988000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - }, - { - "id": "1219143099809402941", - "type": 0, - "content": "https://youtu.be/K1ljOcl39PQ?si=3Q0NRlSmQMhe8djS", - "channel_id": "367936426962190336", - "author": - { - "id": "904441058144944220", - "username": "bigsmoneys.", - "avatar": "95269ec9966fac701d839f000c6901e6", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "bigsmoneys", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [ - { - "type": "video", - "url": "https://www.youtube.com/watch?v=K1ljOcl39PQ", - "title": "The original Crichton Leprechaun news story from LOCAL 15 News, WPMI", - "description": "LOCAL 15, WPMI\n\nFor more information visit LOCAL 15 at www.local15tv.com\nLike us on Facebook: https://www.facebook.com/LOCAL15News\nFollow us on Twitter: https://twitter.com/LOCAL15NEWS", - "color": 16711680, - "author": - { - "name": "NBC 15", - "url": "https://www.youtube.com/channel/UCJc7is6F67EepYaJjxTxtrg" - }, - "provider": - { - "name": "YouTube", - "url": "https://www.youtube.com" - }, - "thumbnail": - { - "url": "https://i.ytimg.com/vi/K1ljOcl39PQ/hqdefault.jpg", - "proxy_url": "https://images-ext-2.discordapp.net/external/rQzZAyQrWPZi0hw-uCG-esTvOaN0oYvKNBlUMJlxWC0/https/i.ytimg.com/vi/K1ljOcl39PQ/hqdefault.jpg", - "width": 480, - "height": 360, - "placeholder": "EhgOFYQwmmezpHhch1mJiCiBgDIH", - "placeholder_version": 1 - }, - "video": - { - "url": "https://www.youtube.com/embed/K1ljOcl39PQ", - "width": 960, - "height": 720, - "placeholder": "EhgOFYQwmmezpHhch1mJiCiBgDIH", - "placeholder_version": 1 - }, - "content_scan_version": 1 - } - ], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T04:39:25.578000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - }, - { - "id": "1219139070668832769", - "type": 0, - "content": "If you flip the leprechaun upside down it looks like gondola peeking out of a small ufo", - "channel_id": "367936426962190336", - "author": - { - "id": "371782531315662848", - "username": "azathoth.", - "avatar": "a_f4ade21ecd877cebc7fd9eae22a111ac", - "discriminator": "0", - "public_flags": 0, - "premium_type": 2, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Azathoth", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T04:23:24.956000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - }, - { - "id": "1219138161603641364", - "type": 0, - "content": "yeah", - "channel_id": "367936426962190336", - "author": - { - "id": "461952652750618645", - "username": "rake6062", - "avatar": "1c12ea775f9219abc4a71105ae041c56", - "discriminator": "0", - "public_flags": 256, - "premium_type": 0, - "flags": 256, - "banner": null, - "accent_color": null, - "global_name": "Rake", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T04:19:48.218000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - }, - { - "id": "1219138045714894920", - "type": 0, - "content": "yeah", - "channel_id": "367936426962190336", - "author": - { - "id": "576527365463605262", - "username": "fellatioustheheadsman", - "avatar": "f964985c4f9dff1479d757add21ec253", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Fellatious the Headsman", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T04:19:20.588000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "reactions": - [ - { - "emoji": - { - "id": null, - "name": "πŸ«ƒ" - }, - "count": 3, - "count_details": - { - "burst": 0, - "normal": 3 - }, - "burst_colors": - [], - "me_burst": false, - "burst_me": false, - "me": false, - "burst_count": 0 - } - ] - }, - { - "id": "1219135884276924466", - "type": 0, - "content": "yeah", - "channel_id": "367936426962190336", - "author": - { - "id": "343919199904727050", - "username": "i.rk", - "avatar": "64f50eb5571c75531293efc725e5148c", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "irk", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T04:10:45.261000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - }, - { - "id": "1219132575256285254", - "type": 0, - "content": "the leprechaun look like a leprechaun to me", - "channel_id": "367936426962190336", - "author": - { - "id": "904441058144944220", - "username": "bigsmoneys.", - "avatar": "95269ec9966fac701d839f000c6901e6", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "bigsmoneys", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1219132575071604856", - "filename": "FB_IMG_1710734227046.jpg", - "size": 121343, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1219132575071604856/FB_IMG_1710734227046.jpg?ex=660a30b0&is=65f7bbb0&hm=b7e281f33829c41e45f252cc2323c4f9895b08647234a8bbd4c3bb8b5f923508&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1219132575071604856/FB_IMG_1710734227046.jpg?ex=660a30b0&is=65f7bbb0&hm=b7e281f33829c41e45f252cc2323c4f9895b08647234a8bbd4c3bb8b5f923508&", - "width": 1080, - "height": 1080, - "content_type": "image/jpeg", - "content_scan_version": 1, - "placeholder": "n/gJDwAhRLVqhoZAe2ppRaiElSUH3i8O", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T03:57:36.329000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - }, - { - "id": "1219074202062028800", - "type": 19, - "content": "The City of God", - "channel_id": "367936426962190336", - "author": - { - "id": "1118288537289240717", - "username": "estuarion", - "avatar": "9a7a7582cd814a6f8d16e19be6904288", - "discriminator": "0", - "public_flags": 0, - "premium_type": 2, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Estuarion", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [ - { - "id": "505353587174408193", - "username": "tgcharlet", - "avatar": "e800ffab640eb8684020054301668f79", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Chehrlet", - "avatar_decoration_data": null, - "banner_color": null - } - ], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-18T00:05:39.075000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1218974428403077121", - "guild_id": "239638846688460802" - }, - "referenced_message": - { - "id": "1218974428403077121", - "type": 19, - "content": "What's on the bottom? Something crusade-related maybe, given the cross?", - "channel_id": "367936426962190336", - "author": - { - "id": "505353587174408193", - "username": "tgcharlet", - "avatar": "e800ffab640eb8684020054301668f79", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Chehrlet", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [ - { - "id": "1118288537289240717", - "username": "estuarion", - "avatar": "9a7a7582cd814a6f8d16e19be6904288", - "discriminator": "0", - "public_flags": 0, - "premium_type": 2, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Estuarion", - "avatar_decoration_data": null, - "banner_color": null - } - ], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T17:29:11.181000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1218715853378424962", - "guild_id": "239638846688460802" - } - } - }, - { - "id": "1219005197083480224", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "87282436160888832", - "username": "rtad", - "avatar": "a_6013b55e715136ed42d11544ffbfc49d", - "discriminator": "0", - "public_flags": 0, - "premium_type": 2, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Richard Tavadon", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1219005196596678808", - "filename": "20240317_122948.png", - "size": 464481, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1219005196596678808/20240317_122948.png?ex=6609ba0e&is=65f7450e&hm=bb5342248f5e6298889224cd02fb6c9d6fb5a3bc4e9b40db5f4aabd5cc2bcc59&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1219005196596678808/20240317_122948.png?ex=6609ba0e&is=65f7450e&hm=bb5342248f5e6298889224cd02fb6c9d6fb5a3bc4e9b40db5f4aabd5cc2bcc59&", - "width": 709, - "height": 703, - "content_type": "image/png", - "content_scan_version": 1, - "placeholder": "LPgND4K/cmtceXhniEiIZ4hZKSaAUGoI", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T19:31:27.006000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "reactions": - [ - { - "emoji": - { - "id": null, - "name": "πŸ€" - }, - "count": 7, - "count_details": - { - "burst": 0, - "normal": 7 - }, - "burst_colors": - [], - "me_burst": false, - "burst_me": false, - "me": false, - "burst_count": 0 - }, - { - "emoji": - { - "id": "367986527671812098", - "name": "zyzz" - }, - "count": 1, - "count_details": - { - "burst": 0, - "normal": 1 - }, - "burst_colors": - [], - "me_burst": false, - "burst_me": false, - "me": false, - "burst_count": 0 - } - ] - }, - { - "id": "1218998924870942914", - "type": 0, - "content": "https://www.youtube.com/watch?v=y3WQ3f9AD_c", - "channel_id": "367936426962190336", - "author": - { - "id": "576527365463605262", - "username": "fellatioustheheadsman", - "avatar": "f964985c4f9dff1479d757add21ec253", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Fellatious the Headsman", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [ - { - "type": "video", - "url": "https://www.youtube.com/watch?v=y3WQ3f9AD_c", - "title": "Disco Elysium at Whole Foods", - "description": "voices by me again", - "color": 16711680, - "author": - { - "name": "jiminy frickit", - "url": "https://www.youtube.com/channel/UCaxBG_9B_L1gsDIK7x5EjRw" - }, - "provider": - { - "name": "YouTube", - "url": "https://www.youtube.com" - }, - "thumbnail": - { - "url": "https://i.ytimg.com/vi/y3WQ3f9AD_c/maxresdefault.jpg", - "proxy_url": "https://images-ext-1.discordapp.net/external/bEAKu0wfFl3XLiSaaKGHuN9IabatwHVh_X44V9CCyB0/https/i.ytimg.com/vi/y3WQ3f9AD_c/maxresdefault.jpg", - "width": 1280, - "height": 720, - "placeholder": "UBgKDIJgLYhYqHeFiKY1YLQBVQ==", - "placeholder_version": 1 - }, - "video": - { - "url": "https://www.youtube.com/embed/y3WQ3f9AD_c", - "width": 1280, - "height": 720, - "placeholder": "UBgKDIJgLYhYqHeFiKY1YLQBVQ==", - "placeholder_version": 1 - }, - "content_scan_version": 1 - } - ], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T19:06:31.594000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - }, - { - "id": "1218998102325858314", - "type": 19, - "content": "Baldwin the leper king methinks", - "channel_id": "367936426962190336", - "author": - { - "id": "265841512250736640", - "username": "brom.unculi", - "avatar": "1384a86544f008ed731ab1d8c3aeaa87", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": null, - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T19:03:15.484000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1218974428403077121", - "guild_id": "239638846688460802" - }, - "referenced_message": - { - "id": "1218974428403077121", - "type": 19, - "content": "What's on the bottom? Something crusade-related maybe, given the cross?", - "channel_id": "367936426962190336", - "author": - { - "id": "505353587174408193", - "username": "tgcharlet", - "avatar": "e800ffab640eb8684020054301668f79", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Chehrlet", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [ - { - "id": "1118288537289240717", - "username": "estuarion", - "avatar": "9a7a7582cd814a6f8d16e19be6904288", - "discriminator": "0", - "public_flags": 0, - "premium_type": 2, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Estuarion", - "avatar_decoration_data": null, - "banner_color": null - } - ], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T17:29:11.181000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1218715853378424962", - "guild_id": "239638846688460802" - } - } - }, - { - "id": "1218974428403077121", - "type": 19, - "content": "What's on the bottom? Something crusade-related maybe, given the cross?", - "channel_id": "367936426962190336", - "author": - { - "id": "505353587174408193", - "username": "tgcharlet", - "avatar": "e800ffab640eb8684020054301668f79", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Chehrlet", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [ - { - "id": "1118288537289240717", - "username": "estuarion", - "avatar": "9a7a7582cd814a6f8d16e19be6904288", - "discriminator": "0", - "public_flags": 0, - "premium_type": 2, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Estuarion", - "avatar_decoration_data": null, - "banner_color": null - } - ], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T17:29:11.181000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1218715853378424962", - "guild_id": "239638846688460802" - }, - "referenced_message": - { - "id": "1218715853378424962", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "1118288537289240717", - "username": "estuarion", - "avatar": "9a7a7582cd814a6f8d16e19be6904288", - "discriminator": "0", - "public_flags": 0, - "premium_type": 2, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Estuarion", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1218715853122568222", - "filename": "432405847_988442116183041_1373815010330270598_n.png", - "size": 918681, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1218715853122568222/432405847_988442116183041_1373815010330270598_n.png?ex=6608ac96&is=65f63796&hm=44088f460886982d533192aa13c80d5fd0760f1c5240f15647dbaeeabc1b6e1f&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1218715853122568222/432405847_988442116183041_1373815010330270598_n.png?ex=6608ac96&is=65f63796&hm=44088f460886982d533192aa13c80d5fd0760f1c5240f15647dbaeeabc1b6e1f&", - "width": 1080, - "height": 1080, - "content_type": "image/png", - "content_scan_version": 1, - "placeholder": "lhgKDwI2+7iMZ5dueIWHWId5ePiZq58H", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T00:21:42.091000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - } - }, - { - "id": "1218967102623318147", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "323215158199582723", - "username": "bbbbg", - "avatar": "a20e016b70386541a4fe9722d0e4f719", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "bbbg", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1218967102401155232", - "filename": "IMG_5848.jpg", - "size": 26016, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1218967102401155232/IMG_5848.jpg?ex=66099694&is=65f72194&hm=05e99b00c896de5d2afedb8ada47ac41dc1fa4896d0d90df1b52f5ced962e6cd&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1218967102401155232/IMG_5848.jpg?ex=66099694&is=65f72194&hm=05e99b00c896de5d2afedb8ada47ac41dc1fa4896d0d90df1b52f5ced962e6cd&", - "width": 500, - "height": 272, - "content_type": "image/jpeg", - "content_scan_version": 1, - "placeholder": "RggGDIJgmIdbaXh5aHdgegSmNw==", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T17:00:04.579000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - }, - { - "id": "1218961366044381194", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "231234227847299072", - "username": "nomar5331", - "avatar": "ec28ce33fd1293c40cb25bb3794703e4", - "discriminator": "0", - "public_flags": 128, - "premium_type": 0, - "flags": 128, - "banner": null, - "accent_color": null, - "global_name": "nomar", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1218961365704904776", - "filename": "2_5449825182317297452.mp4", - "size": 1352662, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1218961365704904776/2_5449825182317297452.mp4?ex=6609913c&is=65f71c3c&hm=572b946a23b2d12ceb2c8f366e1dc4baba87e8e8d79c801a2225ccfedd163586&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1218961365704904776/2_5449825182317297452.mp4?ex=6609913c&is=65f71c3c&hm=572b946a23b2d12ceb2c8f366e1dc4baba87e8e8d79c801a2225ccfedd163586&", - "width": 576, - "height": 854, - "content_type": "video/mp4", - "content_scan_version": 1, - "placeholder": "IQgSDQKCd4WICJeXmaeJiOJVT372", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T16:37:16.872000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - }, - { - "id": "1218961063236731020", - "type": 19, - "content": "top: max stirner, moses hess\nbottom: marx, bruno bauer, ludwig feuerbach (more center than bottom), and engels", - "channel_id": "367936426962190336", - "author": - { - "id": "576527365463605262", - "username": "fellatioustheheadsman", - "avatar": "f964985c4f9dff1479d757add21ec253", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Fellatious the Headsman", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [ - { - "id": "461952652750618645", - "username": "rake6062", - "avatar": "1c12ea775f9219abc4a71105ae041c56", - "discriminator": "0", - "public_flags": 256, - "premium_type": 0, - "flags": 256, - "banner": null, - "accent_color": null, - "global_name": "Rake", - "avatar_decoration_data": null, - "banner_color": null - } - ], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T16:36:04.677000+00:00", - "edited_timestamp": "2024-03-17T16:36:20.752000+00:00", - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1218807712494780507", - "guild_id": "239638846688460802" - }, - "referenced_message": - { - "id": "1218807712494780507", - "type": 19, - "content": "wth are the top and bottom", - "channel_id": "367936426962190336", - "author": - { - "id": "461952652750618645", - "username": "rake6062", - "avatar": "1c12ea775f9219abc4a71105ae041c56", - "discriminator": "0", - "public_flags": 256, - "premium_type": 0, - "flags": 256, - "banner": null, - "accent_color": null, - "global_name": "Rake", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [ - { - "id": "576527365463605262", - "username": "fellatioustheheadsman", - "avatar": "f964985c4f9dff1479d757add21ec253", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Fellatious the Headsman", - "avatar_decoration_data": null, - "banner_color": null - } - ], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T06:26:43.011000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1218773549678858291", - "guild_id": "239638846688460802" - } - } - }, - { - "id": "1218959128588845096", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "755483836019769404", - "username": "flummoxgongoozle", - "avatar": "d77c7ba9a8d02190456becc231ab6fdb", - "discriminator": "0", - "public_flags": 128, - "premium_type": 0, - "flags": 128, - "banner": null, - "accent_color": null, - "global_name": "Flummox Gongoozle", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1218959128274403499", - "filename": "FB_IMG_1710691453892.jpg", - "size": 131741, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1218959128274403499/FB_IMG_1710691453892.jpg?ex=66098f27&is=65f71a27&hm=f02b28a0d4b37791a8fe4d18a64596e13169bcb527e9d93c91e5faf5861a2876&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1218959128274403499/FB_IMG_1710691453892.jpg?ex=66098f27&is=65f71a27&hm=f02b28a0d4b37791a8fe4d18a64596e13169bcb527e9d93c91e5faf5861a2876&", - "width": 1080, - "height": 1174, - "content_type": "image/jpeg", - "content_scan_version": 1, - "placeholder": "4igKFgTAaXh5iDhqpmiHeZd3r2L1KEY=", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T16:28:23.421000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "reactions": - [ - { - "emoji": - { - "id": null, - "name": "❀️" - }, - "count": 1, - "count_details": - { - "burst": 0, - "normal": 1 - }, - "burst_colors": - [], - "me_burst": false, - "burst_me": false, - "me": false, - "burst_count": 0 - } - ] - }, - { - "id": "1218935556445179955", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "279029326870216704", - "username": "1001plateaus", - "avatar": "b47eb91bdbb8c27a15b8811cbdbb221f", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "1001plateaus", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1218935556126539776", - "filename": "IMG_4147.jpg", - "size": 33133, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1218935556126539776/IMG_4147.jpg?ex=66097933&is=65f70433&hm=9753cf74c4d3505e89b6db191631cdf09b8a42e28a94603214fa5e513ad59b8d&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1218935556126539776/IMG_4147.jpg?ex=66097933&is=65f70433&hm=9753cf74c4d3505e89b6db191631cdf09b8a42e28a94603214fa5e513ad59b8d&", - "width": 400, - "height": 275, - "content_type": "image/jpeg", - "content_scan_version": 1, - "placeholder": "WBgOFYJJeHiPiXhsh6mIefpl2W/U", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T14:54:43.384000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - }, - { - "id": "1218932823650598912", - "type": 19, - "content": "Lube/no lube I think", - "channel_id": "367936426962190336", - "author": - { - "id": "773412011945885707", - "username": "k_rp", - "avatar": "df23ab49e39a1c7e52a50aa25ac5786d", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "kerp", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [ - { - "id": "461952652750618645", - "username": "rake6062", - "avatar": "1c12ea775f9219abc4a71105ae041c56", - "discriminator": "0", - "public_flags": 256, - "premium_type": 0, - "flags": 256, - "banner": null, - "accent_color": null, - "global_name": "Rake", - "avatar_decoration_data": null, - "banner_color": null - } - ], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T14:43:51.835000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1218807712494780507", - "guild_id": "239638846688460802" - }, - "referenced_message": - { - "id": "1218807712494780507", - "type": 19, - "content": "wth are the top and bottom", - "channel_id": "367936426962190336", - "author": - { - "id": "461952652750618645", - "username": "rake6062", - "avatar": "1c12ea775f9219abc4a71105ae041c56", - "discriminator": "0", - "public_flags": 256, - "premium_type": 0, - "flags": 256, - "banner": null, - "accent_color": null, - "global_name": "Rake", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [ - { - "id": "576527365463605262", - "username": "fellatioustheheadsman", - "avatar": "f964985c4f9dff1479d757add21ec253", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Fellatious the Headsman", - "avatar_decoration_data": null, - "banner_color": null - } - ], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T06:26:43.011000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1218773549678858291", - "guild_id": "239638846688460802" - } - } - }, - { - "id": "1218871822347538494", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "265841512250736640", - "username": "brom.unculi", - "avatar": "1384a86544f008ed731ab1d8c3aeaa87", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": null, - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1218871822209257492", - "filename": "GIzrTugX0AAxuv2.png", - "size": 2627662, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1218871822209257492/GIzrTugX0AAxuv2.png?ex=66093dd7&is=65f6c8d7&hm=1be5cd4c50d3950ad2801c8109d53feab2020668c57459d903e41aa5267da8c9&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1218871822209257492/GIzrTugX0AAxuv2.png?ex=66093dd7&is=65f6c8d7&hm=1be5cd4c50d3950ad2801c8109d53feab2020668c57459d903e41aa5267da8c9&", - "width": 1169, - "height": 1167, - "content_type": "image/png", - "content_scan_version": 1, - "placeholder": "HzkGF4IrRmOvZoifqIeJNZaXtIkMzP4A", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T10:41:27.991000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - }, - { - "id": "1218850400778715198", - "type": 0, - "content": "https://media.discordapp.net/attachments/669390594694447134/1218756311286812672/IMG_20240317_120203_253.jpg?ex=6608d244&is=65f65d44&hm=7214b35cd1f5a6c3717c918f1604bbf747cba65326fc4d3b9fd0ccbe7f8e6166&", - "channel_id": "367936426962190336", - "author": - { - "id": "218821077034467338", - "username": "musculus", - "avatar": "aa1d9c6e12ffcf0b9a81c42083bc8f0f", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Musculus", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [ - { - "type": "image", - "url": "https://media.discordapp.net/attachments/669390594694447134/1218756311286812672/IMG_20240317_120203_253.jpg?ex=6608d244&is=65f65d44&hm=7214b35cd1f5a6c3717c918f1604bbf747cba65326fc4d3b9fd0ccbe7f8e6166&", - "thumbnail": - { - "url": "https://media.discordapp.net/attachments/669390594694447134/1218756311286812672/IMG_20240317_120203_253.jpg?ex=6608d244&is=65f65d44&hm=7214b35cd1f5a6c3717c918f1604bbf747cba65326fc4d3b9fd0ccbe7f8e6166&", - "proxy_url": "https://media.discordapp.net/attachments/669390594694447134/1218756311286812672/IMG_20240317_120203_253.jpg?ex=6608d244&is=65f65d44&hm=7214b35cd1f5a6c3717c918f1604bbf747cba65326fc4d3b9fd0ccbe7f8e6166&", - "width": 561, - "height": 1280, - "placeholder": "0wcWAwCIgLd3iHRMYnD7+Us=", - "placeholder_version": 1 - }, - "content_scan_version": 1 - } - ], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T09:16:20.691000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - }, - { - "id": "1218848546116210709", - "type": 0, - "content": "https://vxtwitter.com/cj_prin/status/1768859573924872490?s=46&t=GjT9dccY6ZClFOuKMEviJg", - "channel_id": "367936426962190336", - "author": - { - "id": "218821077034467338", - "username": "musculus", - "avatar": "aa1d9c6e12ffcf0b9a81c42083bc8f0f", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Musculus", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [ - { - "type": "video", - "url": "https://vxtwitter.com/cj_prin/status/1768859573924872490?s=46&t=GjT9dccY6ZClFOuKMEviJg", - "title": "C.J. Prince (@cj_prin)", - "description": "wait what\n\nπŸ’– 14.19K πŸ” 1.01K", - "color": 8388564, - "author": - { - "name": "wait what\n\nπŸ’– 14.19K πŸ” 1.01K", - "url": "https://twitter.com/cj_prin/status/1768859573924872490" - }, - "provider": - { - "name": "vxTwitter / fixvx", - "url": "https://github.com/dylanpdx/BetterTwitFix" - }, - "video": - { - "url": "https://video.twimg.com/ext_tw_video/1768859547895042049/pu/vid/avc1/576x1024/e8xkBhJDz8Yaj6eo.mp4?tag=12", - "proxy_url": "https://images-ext-2.discordapp.net/external/PKW5QXPJaLu4Gu9NNuszpTc7NG0aje7iBAyfSkILFDg/%3Ftag%3D12/https/video.twimg.com/ext_tw_video/1768859547895042049/pu/vid/avc1/576x1024/e8xkBhJDz8Yaj6eo.mp4", - "width": 576, - "height": 1024, - "placeholder": "2kgKHAZ1B4rXd4hoymeHf2n3lw==", - "placeholder_version": 1 - }, - "content_scan_version": 1 - } - ], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T09:08:58.505000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "reactions": - [ - { - "emoji": - { - "id": "967055895810949161", - "name": "wojpog" - }, - "count": 1, - "count_details": - { - "burst": 0, - "normal": 1 - }, - "burst_colors": - [], - "me_burst": false, - "burst_me": false, - "me": false, - "burst_count": 0 - } - ] - }, - { - "id": "1218808434980421642", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "904441058144944220", - "username": "bigsmoneys.", - "avatar": "95269ec9966fac701d839f000c6901e6", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "bigsmoneys", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1218808434774904872", - "filename": "1710603573882021.jpg", - "size": 117843, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1218808434774904872/1710603573882021.jpg?ex=660902cf&is=65f68dcf&hm=24d3193418d7e0bcc573a9ba79088288818dba66239fd2d5807ac2d5361146b3&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1218808434774904872/1710603573882021.jpg?ex=660902cf&is=65f68dcf&hm=24d3193418d7e0bcc573a9ba79088288818dba66239fd2d5807ac2d5361146b3&", - "width": 1920, - "height": 1032, - "content_type": "image/jpeg", - "content_scan_version": 1, - "placeholder": "VBgGDIJQeXV6d3d3d2ZVeTCUCA==", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T06:29:35.265000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "reactions": - [ - { - "emoji": - { - "id": "1006852557798383726", - "name": "kekw" - }, - "count": 1, - "count_details": - { - "burst": 0, - "normal": 1 - }, - "burst_colors": - [], - "me_burst": false, - "burst_me": false, - "me": false, - "burst_count": 0 - } - ] - }, - { - "id": "1218807712494780507", - "type": 19, - "content": "wth are the top and bottom", - "channel_id": "367936426962190336", - "author": - { - "id": "461952652750618645", - "username": "rake6062", - "avatar": "1c12ea775f9219abc4a71105ae041c56", - "discriminator": "0", - "public_flags": 256, - "premium_type": 0, - "flags": 256, - "banner": null, - "accent_color": null, - "global_name": "Rake", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [], - "embeds": - [], - "mentions": - [ - { - "id": "576527365463605262", - "username": "fellatioustheheadsman", - "avatar": "f964985c4f9dff1479d757add21ec253", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Fellatious the Headsman", - "avatar_decoration_data": null, - "banner_color": null - } - ], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T06:26:43.011000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "message_reference": - { - "channel_id": "367936426962190336", - "message_id": "1218773549678858291", - "guild_id": "239638846688460802" - }, - "referenced_message": - { - "id": "1218773549678858291", - "type": 0, - "content": "i saw this so everyone else must too", - "channel_id": "367936426962190336", - "author": - { - "id": "576527365463605262", - "username": "fellatioustheheadsman", - "avatar": "f964985c4f9dff1479d757add21ec253", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Fellatious the Headsman", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1218773549440041011", - "filename": "KBx9ex4.png", - "size": 591545, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1218773549440041011/KBx9ex4.png?ex=6608e251&is=65f66d51&hm=5057b2991d2afbc1b8bcdea454a71b1583f58f10aea3e5467aee840415733776&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1218773549440041011/KBx9ex4.png?ex=6608e251&is=65f66d51&hm=5057b2991d2afbc1b8bcdea454a71b1583f58f10aea3e5467aee840415733776&", - "width": 1080, - "height": 1080, - "content_type": "image/png", - "content_scan_version": 1, - "placeholder": "9AcKFwT42ZaIeHiOdXeH6Gh4+leKf/cI", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T04:10:57.961000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - } - }, - { - "id": "1218788841738207263", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "371782531315662848", - "username": "azathoth.", - "avatar": "a_f4ade21ecd877cebc7fd9eae22a111ac", - "discriminator": "0", - "public_flags": 0, - "premium_type": 2, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "Azathoth", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1218788841587081276", - "filename": "IMG_4506.jpg", - "size": 100477, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1218788841587081276/IMG_4506.jpg?ex=6608f08f&is=65f67b8f&hm=8b7a50435168ec1ee041aebbe53a79f5ee6d35919bce3d78cad477c94ee8ffd6&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1218788841587081276/IMG_4506.jpg?ex=6608f08f&is=65f67b8f&hm=8b7a50435168ec1ee041aebbe53a79f5ee6d35919bce3d78cad477c94ee8ffd6&", - "width": 965, - "height": 659, - "content_type": "image/jpeg", - "content_scan_version": 1, - "placeholder": "7wcGDYJTtuOci3dptqiIn/kymz+X", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T05:11:43.872000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [] - }, - { - "id": "1218776103234043994", - "type": 0, - "content": "", - "channel_id": "367936426962190336", - "author": - { - "id": "415957118282367001", - "username": "strichtarn", - "avatar": "cbab0267f84066ce0d033edc8026a417", - "discriminator": "0", - "public_flags": 0, - "premium_type": 0, - "flags": 0, - "banner": null, - "accent_color": null, - "global_name": "picatinny", - "avatar_decoration_data": null, - "banner_color": null - }, - "attachments": - [ - { - "id": "1218776102999166986", - "filename": "Screenshot_20240316-200300.png", - "size": 941926, - "url": "https://cdn.discordapp.com/attachments/367936426962190336/1218776102999166986/Screenshot_20240316-200300.png?ex=6608e4b2&is=65f66fb2&hm=a2639c0d84bea784d4c2b703bf87121c1c2a52a1867ede9ae90e5ad58438acb9&", - "proxy_url": "https://media.discordapp.net/attachments/367936426962190336/1218776102999166986/Screenshot_20240316-200300.png?ex=6608e4b2&is=65f66fb2&hm=a2639c0d84bea784d4c2b703bf87121c1c2a52a1867ede9ae90e5ad58438acb9&", - "width": 864, - "height": 1025, - "content_type": "image/png", - "content_scan_version": 1, - "placeholder": "zQeKBAAPWSeXCJZ8CardNrACAICId4d3Bw==", - "placeholder_version": 1 - } - ], - "embeds": - [], - "mentions": - [], - "mention_roles": - [], - "pinned": false, - "mention_everyone": false, - "tts": false, - "timestamp": "2024-03-17T04:21:06.776000+00:00", - "edited_timestamp": null, - "flags": 0, - "components": - [], - "reactions": - [ - { - "emoji": - { - "id": null, - "name": "😭" - }, - "count": 4, - "count_details": - { - "burst": 0, - "normal": 4 - }, - "burst_colors": - [], - "me_burst": false, - "burst_me": false, - "me": false, - "burst_count": 0 - } - ] - } -] \ No newline at end of file diff --git a/db/__init__.py b/db/__init__.py new file mode 100644 index 0000000..11bf78b --- /dev/null +++ b/db/__init__.py @@ -0,0 +1,4 @@ +from db.base import Base + +from db.attachment import Attachment +from db.meme import Meme diff --git a/db/attachment.py b/db/attachment.py new file mode 100644 index 0000000..bb431c6 --- /dev/null +++ b/db/attachment.py @@ -0,0 +1,15 @@ +from sqlalchemy import create_engine, Column, Integer, String, JSON, Uuid + +from db.base import Base + +# Define a model with a JSON column +class Attachment(Base): + __tablename__ = 'attachments' + + id = Column(Uuid, primary_key=True) + msg_id = Column(Integer, nullable=False, index=True) + attributes = Column(JSON, nullable=False) + vision = Column(JSON, nullable=False) + message = Column(JSON, nullable=False) + guild = Column(JSON, nullable=False) + channel = Column(JSON, nullable=False) diff --git a/db/base.py b/db/base.py new file mode 100644 index 0000000..860e542 --- /dev/null +++ b/db/base.py @@ -0,0 +1,3 @@ +from sqlalchemy.ext.declarative import declarative_base + +Base = declarative_base() diff --git a/db/meme.py b/db/meme.py new file mode 100644 index 0000000..6b09459 --- /dev/null +++ b/db/meme.py @@ -0,0 +1,12 @@ +from sqlalchemy import Column, Integer, String, JSON, Uuid + +from db.base import Base + +# Define a model with a JSON column +class Meme(Base): + __tablename__ = 'memes' + + id = Column(Uuid, primary_key=True) + url = Column(String, nullable=False) + text = Column(String, nullable=False) + tags = Column(JSON, nullable=False) \ No newline at end of file diff --git a/db/migrate.py b/db/migrate.py new file mode 100644 index 0000000..ca5fd09 --- /dev/null +++ b/db/migrate.py @@ -0,0 +1,16 @@ +from sqlalchemy import create_engine, Column, Integer, String, Engine +from alembic.config import Config +from alembic import command +from dotenv import dotenv_values + +# Function to perform the database migration +def migrate_db(engine: Engine, db_url): + # Configure Alembic + alembic_cfg = Config() + alembic_cfg.set_main_option("script_location", "migrations") + alembic_cfg.set_main_option("sqlalchemy.url", db_url) + + # Run migrations using Alembic + command.upgrade(alembic_cfg, "head") + + print('db up to date') diff --git a/idea.json b/idea.json deleted file mode 100644 index dd17151..0000000 --- a/idea.json +++ /dev/null @@ -1,1897 +0,0 @@ -{ - "responses": [ - { - "textAnnotations": [ - { - "locale": "en", - "description": "I mean the idea of God\npresupposes the\nexistence of God.", - "boundingPoly": { - "vertices": [ - { - "x": 190, - "y": 218 - }, - { - "x": 308, - "y": 218 - }, - { - "x": 308, - "y": 258 - }, - { - "x": 190, - "y": 258 - } - ] - } - }, - { - "description": "I", - "boundingPoly": { - "vertices": [ - { - "x": 190, - "y": 220 - }, - { - "x": 194, - "y": 220 - }, - { - "x": 194, - "y": 230 - }, - { - "x": 190, - "y": 230 - } - ] - } - }, - { - "description": "mean", - "boundingPoly": { - "vertices": [ - { - "x": 195, - "y": 219 - }, - { - "x": 224, - "y": 219 - }, - { - "x": 224, - "y": 229 - }, - { - "x": 195, - "y": 229 - } - ] - } - }, - { - "description": "the", - "boundingPoly": { - "vertices": [ - { - "x": 227, - "y": 219 - }, - { - "x": 245, - "y": 219 - }, - { - "x": 245, - "y": 229 - }, - { - "x": 227, - "y": 229 - } - ] - } - }, - { - "description": "idea", - "boundingPoly": { - "vertices": [ - { - "x": 248, - "y": 219 - }, - { - "x": 270, - "y": 219 - }, - { - "x": 270, - "y": 229 - }, - { - "x": 248, - "y": 229 - } - ] - } - }, - { - "description": "of", - "boundingPoly": { - "vertices": [ - { - "x": 273, - "y": 219 - }, - { - "x": 285, - "y": 219 - }, - { - "x": 285, - "y": 229 - }, - { - "x": 273, - "y": 229 - } - ] - } - }, - { - "description": "God", - "boundingPoly": { - "vertices": [ - { - "x": 287, - "y": 219 - }, - { - "x": 308, - "y": 219 - }, - { - "x": 308, - "y": 229 - }, - { - "x": 287, - "y": 229 - } - ] - } - }, - { - "description": "presupposes", - "boundingPoly": { - "vertices": [ - { - "x": 206, - "y": 236 - }, - { - "x": 273, - "y": 234 - }, - { - "x": 273, - "y": 244 - }, - { - "x": 206, - "y": 246 - } - ] - } - }, - { - "description": "the", - "boundingPoly": { - "vertices": [ - { - "x": 275, - "y": 234 - }, - { - "x": 292, - "y": 234 - }, - { - "x": 292, - "y": 244 - }, - { - "x": 275, - "y": 244 - } - ] - } - }, - { - "description": "existence", - "boundingPoly": { - "vertices": [ - { - "x": 204, - "y": 248 - }, - { - "x": 252, - "y": 248 - }, - { - "x": 252, - "y": 257 - }, - { - "x": 204, - "y": 257 - } - ] - } - }, - { - "description": "of", - "boundingPoly": { - "vertices": [ - { - "x": 256, - "y": 248 - }, - { - "x": 267, - "y": 248 - }, - { - "x": 267, - "y": 256 - }, - { - "x": 256, - "y": 256 - } - ] - } - }, - { - "description": "God", - "boundingPoly": { - "vertices": [ - { - "x": 269, - "y": 248 - }, - { - "x": 292, - "y": 248 - }, - { - "x": 292, - "y": 256 - }, - { - "x": 269, - "y": 256 - } - ] - } - }, - { - "description": ".", - "boundingPoly": { - "vertices": [ - { - "x": 291, - "y": 248 - }, - { - "x": 294, - "y": 248 - }, - { - "x": 294, - "y": 256 - }, - { - "x": 291, - "y": 256 - } - ] - } - } - ], - "fullTextAnnotation": { - "pages": [ - { - "property": { - "detectedLanguages": [ - { - "languageCode": "en", - "confidence": 1 - } - ] - }, - "width": 500, - "height": 272, - "blocks": [ - { - "boundingBox": { - "vertices": [ - { - "x": 190, - "y": 219 - }, - { - "x": 308, - "y": 218 - }, - { - "x": 308, - "y": 257 - }, - { - "x": 190, - "y": 258 - } - ] - }, - "paragraphs": [ - { - "boundingBox": { - "vertices": [ - { - "x": 190, - "y": 219 - }, - { - "x": 308, - "y": 218 - }, - { - "x": 308, - "y": 229 - }, - { - "x": 190, - "y": 230 - } - ] - }, - "words": [ - { - "property": { - "detectedLanguages": [ - { - "languageCode": "en", - "confidence": 1 - } - ] - }, - "boundingBox": { - "vertices": [ - { - "x": 190, - "y": 220 - }, - { - "x": 194, - "y": 220 - }, - { - "x": 194, - "y": 230 - }, - { - "x": 190, - "y": 230 - } - ] - }, - "symbols": [ - { - "property": { - "detectedBreak": { - "type": "SPACE" - } - }, - "boundingBox": { - "vertices": [ - { - "x": 190, - "y": 220 - }, - { - "x": 194, - "y": 220 - }, - { - "x": 194, - "y": 230 - }, - { - "x": 190, - "y": 230 - } - ] - }, - "text": "I" - } - ] - }, - { - "property": { - "detectedLanguages": [ - { - "languageCode": "en", - "confidence": 1 - } - ] - }, - "boundingBox": { - "vertices": [ - { - "x": 195, - "y": 219 - }, - { - "x": 224, - "y": 219 - }, - { - "x": 224, - "y": 229 - }, - { - "x": 195, - "y": 229 - } - ] - }, - "symbols": [ - { - "boundingBox": { - "vertices": [ - { - "x": 195, - "y": 219 - }, - { - "x": 204, - "y": 219 - }, - { - "x": 204, - "y": 229 - }, - { - "x": 195, - "y": 229 - } - ] - }, - "text": "m" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 205, - "y": 219 - }, - { - "x": 211, - "y": 219 - }, - { - "x": 211, - "y": 229 - }, - { - "x": 205, - "y": 229 - } - ] - }, - "text": "e" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 212, - "y": 219 - }, - { - "x": 218, - "y": 219 - }, - { - "x": 218, - "y": 229 - }, - { - "x": 212, - "y": 229 - } - ] - }, - "text": "a" - }, - { - "property": { - "detectedBreak": { - "type": "SPACE" - } - }, - "boundingBox": { - "vertices": [ - { - "x": 218, - "y": 219 - }, - { - "x": 224, - "y": 219 - }, - { - "x": 224, - "y": 229 - }, - { - "x": 218, - "y": 229 - } - ] - }, - "text": "n" - } - ] - }, - { - "property": { - "detectedLanguages": [ - { - "languageCode": "en", - "confidence": 1 - } - ] - }, - "boundingBox": { - "vertices": [ - { - "x": 227, - "y": 219 - }, - { - "x": 245, - "y": 219 - }, - { - "x": 245, - "y": 229 - }, - { - "x": 227, - "y": 229 - } - ] - }, - "symbols": [ - { - "boundingBox": { - "vertices": [ - { - "x": 227, - "y": 219 - }, - { - "x": 232, - "y": 219 - }, - { - "x": 232, - "y": 229 - }, - { - "x": 227, - "y": 229 - } - ] - }, - "text": "t" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 232, - "y": 219 - }, - { - "x": 239, - "y": 219 - }, - { - "x": 239, - "y": 229 - }, - { - "x": 232, - "y": 229 - } - ] - }, - "text": "h" - }, - { - "property": { - "detectedBreak": { - "type": "SPACE" - } - }, - "boundingBox": { - "vertices": [ - { - "x": 238, - "y": 219 - }, - { - "x": 245, - "y": 219 - }, - { - "x": 245, - "y": 229 - }, - { - "x": 238, - "y": 229 - } - ] - }, - "text": "e" - } - ] - }, - { - "property": { - "detectedLanguages": [ - { - "languageCode": "en", - "confidence": 1 - } - ] - }, - "boundingBox": { - "vertices": [ - { - "x": 248, - "y": 219 - }, - { - "x": 270, - "y": 219 - }, - { - "x": 270, - "y": 229 - }, - { - "x": 248, - "y": 229 - } - ] - }, - "symbols": [ - { - "boundingBox": { - "vertices": [ - { - "x": 248, - "y": 219 - }, - { - "x": 251, - "y": 219 - }, - { - "x": 251, - "y": 229 - }, - { - "x": 248, - "y": 229 - } - ] - }, - "text": "i" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 251, - "y": 219 - }, - { - "x": 257, - "y": 219 - }, - { - "x": 257, - "y": 229 - }, - { - "x": 251, - "y": 229 - } - ] - }, - "text": "d" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 257, - "y": 219 - }, - { - "x": 263, - "y": 219 - }, - { - "x": 263, - "y": 229 - }, - { - "x": 257, - "y": 229 - } - ] - }, - "text": "e" - }, - { - "property": { - "detectedBreak": { - "type": "SPACE" - } - }, - "boundingBox": { - "vertices": [ - { - "x": 264, - "y": 219 - }, - { - "x": 270, - "y": 219 - }, - { - "x": 270, - "y": 229 - }, - { - "x": 264, - "y": 229 - } - ] - }, - "text": "a" - } - ] - }, - { - "property": { - "detectedLanguages": [ - { - "languageCode": "en", - "confidence": 1 - } - ] - }, - "boundingBox": { - "vertices": [ - { - "x": 273, - "y": 219 - }, - { - "x": 285, - "y": 219 - }, - { - "x": 285, - "y": 229 - }, - { - "x": 273, - "y": 229 - } - ] - }, - "symbols": [ - { - "boundingBox": { - "vertices": [ - { - "x": 273, - "y": 219 - }, - { - "x": 279, - "y": 219 - }, - { - "x": 279, - "y": 229 - }, - { - "x": 273, - "y": 229 - } - ] - }, - "text": "o" - }, - { - "property": { - "detectedBreak": { - "type": "SPACE" - } - }, - "boundingBox": { - "vertices": [ - { - "x": 280, - "y": 219 - }, - { - "x": 285, - "y": 219 - }, - { - "x": 285, - "y": 229 - }, - { - "x": 280, - "y": 229 - } - ] - }, - "text": "f" - } - ] - }, - { - "property": { - "detectedLanguages": [ - { - "languageCode": "en", - "confidence": 1 - } - ] - }, - "boundingBox": { - "vertices": [ - { - "x": 287, - "y": 219 - }, - { - "x": 308, - "y": 219 - }, - { - "x": 308, - "y": 229 - }, - { - "x": 287, - "y": 229 - } - ] - }, - "symbols": [ - { - "boundingBox": { - "vertices": [ - { - "x": 287, - "y": 219 - }, - { - "x": 295, - "y": 219 - }, - { - "x": 295, - "y": 229 - }, - { - "x": 287, - "y": 229 - } - ] - }, - "text": "G" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 296, - "y": 219 - }, - { - "x": 302, - "y": 219 - }, - { - "x": 302, - "y": 229 - }, - { - "x": 296, - "y": 229 - } - ] - }, - "text": "o" - }, - { - "property": { - "detectedBreak": { - "type": "LINE_BREAK" - } - }, - "boundingBox": { - "vertices": [ - { - "x": 302, - "y": 219 - }, - { - "x": 308, - "y": 219 - }, - { - "x": 308, - "y": 229 - }, - { - "x": 302, - "y": 229 - } - ] - }, - "text": "d" - } - ] - } - ] - }, - { - "boundingBox": { - "vertices": [ - { - "x": 204, - "y": 235 - }, - { - "x": 294, - "y": 234 - }, - { - "x": 294, - "y": 257 - }, - { - "x": 204, - "y": 258 - } - ] - }, - "words": [ - { - "property": { - "detectedLanguages": [ - { - "languageCode": "en", - "confidence": 1 - } - ] - }, - "boundingBox": { - "vertices": [ - { - "x": 206, - "y": 236 - }, - { - "x": 273, - "y": 234 - }, - { - "x": 273, - "y": 244 - }, - { - "x": 206, - "y": 246 - } - ] - }, - "symbols": [ - { - "boundingBox": { - "vertices": [ - { - "x": 206, - "y": 237 - }, - { - "x": 213, - "y": 237 - }, - { - "x": 213, - "y": 246 - }, - { - "x": 206, - "y": 246 - } - ] - }, - "text": "p" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 212, - "y": 236 - }, - { - "x": 217, - "y": 236 - }, - { - "x": 217, - "y": 245 - }, - { - "x": 212, - "y": 245 - } - ] - }, - "text": "r" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 216, - "y": 236 - }, - { - "x": 223, - "y": 236 - }, - { - "x": 223, - "y": 245 - }, - { - "x": 216, - "y": 245 - } - ] - }, - "text": "e" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 222, - "y": 236 - }, - { - "x": 227, - "y": 236 - }, - { - "x": 227, - "y": 245 - }, - { - "x": 222, - "y": 245 - } - ] - }, - "text": "s" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 229, - "y": 236 - }, - { - "x": 234, - "y": 236 - }, - { - "x": 234, - "y": 245 - }, - { - "x": 229, - "y": 245 - } - ] - }, - "text": "u" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 235, - "y": 236 - }, - { - "x": 242, - "y": 236 - }, - { - "x": 242, - "y": 245 - }, - { - "x": 235, - "y": 245 - } - ] - }, - "text": "p" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 241, - "y": 236 - }, - { - "x": 247, - "y": 236 - }, - { - "x": 247, - "y": 245 - }, - { - "x": 241, - "y": 245 - } - ] - }, - "text": "p" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 248, - "y": 235 - }, - { - "x": 255, - "y": 235 - }, - { - "x": 255, - "y": 244 - }, - { - "x": 248, - "y": 244 - } - ] - }, - "text": "o" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 254, - "y": 235 - }, - { - "x": 259, - "y": 235 - }, - { - "x": 259, - "y": 244 - }, - { - "x": 254, - "y": 244 - } - ] - }, - "text": "s" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 260, - "y": 235 - }, - { - "x": 267, - "y": 235 - }, - { - "x": 267, - "y": 244 - }, - { - "x": 260, - "y": 244 - } - ] - }, - "text": "e" - }, - { - "property": { - "detectedBreak": { - "type": "SPACE" - } - }, - "boundingBox": { - "vertices": [ - { - "x": 267, - "y": 235 - }, - { - "x": 273, - "y": 235 - }, - { - "x": 273, - "y": 244 - }, - { - "x": 267, - "y": 244 - } - ] - }, - "text": "s" - } - ] - }, - { - "property": { - "detectedLanguages": [ - { - "languageCode": "en", - "confidence": 1 - } - ] - }, - "boundingBox": { - "vertices": [ - { - "x": 275, - "y": 234 - }, - { - "x": 292, - "y": 234 - }, - { - "x": 292, - "y": 244 - }, - { - "x": 275, - "y": 244 - } - ] - }, - "symbols": [ - { - "boundingBox": { - "vertices": [ - { - "x": 275, - "y": 235 - }, - { - "x": 280, - "y": 235 - }, - { - "x": 280, - "y": 244 - }, - { - "x": 275, - "y": 244 - } - ] - }, - "text": "t" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 279, - "y": 234 - }, - { - "x": 286, - "y": 234 - }, - { - "x": 286, - "y": 243 - }, - { - "x": 279, - "y": 243 - } - ] - }, - "text": "h" - }, - { - "property": { - "detectedBreak": { - "type": "EOL_SURE_SPACE" - } - }, - "boundingBox": { - "vertices": [ - { - "x": 285, - "y": 234 - }, - { - "x": 292, - "y": 234 - }, - { - "x": 292, - "y": 243 - }, - { - "x": 285, - "y": 243 - } - ] - }, - "text": "e" - } - ] - }, - { - "property": { - "detectedLanguages": [ - { - "languageCode": "en", - "confidence": 1 - } - ] - }, - "boundingBox": { - "vertices": [ - { - "x": 204, - "y": 248 - }, - { - "x": 252, - "y": 248 - }, - { - "x": 252, - "y": 257 - }, - { - "x": 204, - "y": 257 - } - ] - }, - "symbols": [ - { - "boundingBox": { - "vertices": [ - { - "x": 204, - "y": 249 - }, - { - "x": 210, - "y": 249 - }, - { - "x": 210, - "y": 257 - }, - { - "x": 204, - "y": 257 - } - ] - }, - "text": "e" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 209, - "y": 248 - }, - { - "x": 215, - "y": 248 - }, - { - "x": 215, - "y": 256 - }, - { - "x": 209, - "y": 256 - } - ] - }, - "text": "x" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 215, - "y": 248 - }, - { - "x": 218, - "y": 248 - }, - { - "x": 218, - "y": 256 - }, - { - "x": 215, - "y": 256 - } - ] - }, - "text": "i" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 218, - "y": 248 - }, - { - "x": 223, - "y": 248 - }, - { - "x": 223, - "y": 256 - }, - { - "x": 218, - "y": 256 - } - ] - }, - "text": "s" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 224, - "y": 248 - }, - { - "x": 228, - "y": 248 - }, - { - "x": 228, - "y": 256 - }, - { - "x": 224, - "y": 256 - } - ] - }, - "text": "t" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 227, - "y": 248 - }, - { - "x": 233, - "y": 248 - }, - { - "x": 233, - "y": 256 - }, - { - "x": 227, - "y": 256 - } - ] - }, - "text": "e" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 234, - "y": 248 - }, - { - "x": 239, - "y": 248 - }, - { - "x": 239, - "y": 256 - }, - { - "x": 234, - "y": 256 - } - ] - }, - "text": "n" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 240, - "y": 248 - }, - { - "x": 245, - "y": 248 - }, - { - "x": 245, - "y": 256 - }, - { - "x": 240, - "y": 256 - } - ] - }, - "text": "c" - }, - { - "property": { - "detectedBreak": { - "type": "SPACE" - } - }, - "boundingBox": { - "vertices": [ - { - "x": 246, - "y": 248 - }, - { - "x": 252, - "y": 248 - }, - { - "x": 252, - "y": 256 - }, - { - "x": 246, - "y": 256 - } - ] - }, - "text": "e" - } - ] - }, - { - "property": { - "detectedLanguages": [ - { - "languageCode": "en", - "confidence": 1 - } - ] - }, - "boundingBox": { - "vertices": [ - { - "x": 256, - "y": 248 - }, - { - "x": 267, - "y": 248 - }, - { - "x": 267, - "y": 256 - }, - { - "x": 256, - "y": 256 - } - ] - }, - "symbols": [ - { - "boundingBox": { - "vertices": [ - { - "x": 256, - "y": 248 - }, - { - "x": 263, - "y": 248 - }, - { - "x": 263, - "y": 256 - }, - { - "x": 256, - "y": 256 - } - ] - }, - "text": "o" - }, - { - "property": { - "detectedBreak": { - "type": "SPACE" - } - }, - "boundingBox": { - "vertices": [ - { - "x": 262, - "y": 248 - }, - { - "x": 267, - "y": 248 - }, - { - "x": 267, - "y": 256 - }, - { - "x": 262, - "y": 256 - } - ] - }, - "text": "f" - } - ] - }, - { - "property": { - "detectedLanguages": [ - { - "languageCode": "en", - "confidence": 1 - } - ] - }, - "boundingBox": { - "vertices": [ - { - "x": 269, - "y": 248 - }, - { - "x": 292, - "y": 248 - }, - { - "x": 292, - "y": 256 - }, - { - "x": 269, - "y": 256 - } - ] - }, - "symbols": [ - { - "boundingBox": { - "vertices": [ - { - "x": 269, - "y": 248 - }, - { - "x": 277, - "y": 248 - }, - { - "x": 277, - "y": 256 - }, - { - "x": 269, - "y": 256 - } - ] - }, - "text": "G" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 278, - "y": 248 - }, - { - "x": 284, - "y": 248 - }, - { - "x": 284, - "y": 256 - }, - { - "x": 278, - "y": 256 - } - ] - }, - "text": "o" - }, - { - "boundingBox": { - "vertices": [ - { - "x": 285, - "y": 248 - }, - { - "x": 292, - "y": 248 - }, - { - "x": 292, - "y": 256 - }, - { - "x": 285, - "y": 256 - } - ] - }, - "text": "d" - } - ] - }, - { - "property": { - "detectedLanguages": [ - { - "languageCode": "en", - "confidence": 1 - } - ] - }, - "boundingBox": { - "vertices": [ - { - "x": 291, - "y": 248 - }, - { - "x": 294, - "y": 248 - }, - { - "x": 294, - "y": 256 - }, - { - "x": 291, - "y": 256 - } - ] - }, - "symbols": [ - { - "property": { - "detectedBreak": { - "type": "LINE_BREAK" - } - }, - "boundingBox": { - "vertices": [ - { - "x": 291, - "y": 248 - }, - { - "x": 294, - "y": 248 - }, - { - "x": 294, - "y": 256 - }, - { - "x": 291, - "y": 256 - } - ] - }, - "text": "." - } - ] - } - ] - } - ], - "blockType": "TEXT" - } - ] - } - ], - "text": "I mean the idea of God\npresupposes the\nexistence of God." - } - } - ] -} diff --git a/image.py b/image.py deleted file mode 100644 index 7d446ed..0000000 --- a/image.py +++ /dev/null @@ -1,26 +0,0 @@ -from google.cloud import vision -from google.cloud.vision_v1 import types - -from dotenv import load_dotenv - -load_dotenv() - -crows = 'https://cdn.discordapp.com/attachments/367936426962190336/1222335573855834214/AjPuqci.png?ex=6615d7b6&is=660362b6&hm=e364398ce7401334298eb82bddedab56d944f5833508fde4b07363b329a95c6f&' - -# Authenticate the client -client = vision.ImageAnnotatorClient() - -# Perform text detection -features = [types.Feature(type=types.Feature.Type.TEXT_DETECTION)] -request = { - 'image': { - 'source': { 'image_uri': crows } - }, - 'features': features -} - -response: types.AnnotateImageResponse = client.annotate_image(request=request) -texts = response.text_annotations[0].description - -print(texts) - diff --git a/main.py b/main.py index 64cab5f..ee18c4c 100644 --- a/main.py +++ b/main.py @@ -19,11 +19,11 @@ from dotenv import dotenv_values, load_dotenv from google.cloud import vision as google_vision from google.protobuf.json_format import MessageToDict, MessageToJson from google.cloud.vision_v1 import types -from minio import Minio import meilisearch from urllib3.util import Url, url -import uploader +from sqlalchemy import create_engine +from db.migrate import migrate_db # need to change the env for the google api calls load_dotenv() @@ -55,42 +55,16 @@ class MemeDocument: text: str tags: List[str] -@dataclass -class DiscordAttachmentMessage: - id: UUID - msg_id: int - url: str - upload_url: str - guild_name: str - channel_name: str - vision_json: str | None - message_json: Dict[str, Any] - guild_json: Dict[str, Any] - channel_json: Dict[str, Any] +def detect_text(url, vision): + request = { + 'image': { 'source': { 'image_uri': url } }, + 'features': [types.Feature(type=types.Feature.Type.TEXT_DETECTION)], + } - def document_dir(self): - return f'{DATA_DIR}/guilds/{self.guild_name}/{self.channel_name}' + response: types.AnnotateImageResponse = vision.annotate_image(request=request) + vision_json = json.loads(types.AnnotateImageResponse.to_json(response)) - def file_dir(self): - return f"{DATA_DIR}/imgs/" - - def detect_text(self, vision): - request = { - 'image': { 'source': { 'image_uri': self.url } }, - 'features': [types.Feature(type=types.Feature.Type.TEXT_DETECTION)], - } - - response: types.AnnotateImageResponse = vision.annotate_image(request=request) - self.vision_json = json.loads(types.AnnotateImageResponse.to_json(response)) - - if len(response.text_annotations) > 0: - self.text = response.text_annotations[0].description - - return request - - def persist(self): - with open(f'{self.document_dir()}/{self.id}.json', 'w') as f: - json.dump(vars(self), f, indent=4) + return request def filter_message_img_urls(messages): url_lists = map( @@ -203,38 +177,39 @@ async def check_bucket_exists(storage, bucket_name): raise # Reraise other exceptions async def main(): - assert config['MINIO_URL'] + assert config['STORAGE_URL'] + assert config['POSTGRES_URL'] vision = google_vision.ImageAnnotatorClient() - # storage = Minio(config['MINIO_URL'], - # access_key=config['MINIO_ACCESS_KEY'], - # secret_key=config['MINIO_SECRET_KEY'], - # ) + # db setup + db_url = config['POSTGRES_URL'] + db_engine = create_engine(db_url) + migrate_db(db_engine, db_url) - aioboto = aiobotocore_get_session() - async with aioboto.create_client( - 's3', - endpoint_url=config['STORAGE_URL'], - aws_access_key_id=config['STORAGE_ACCESS_KEY'], - aws_secret_access_key=config['STORAGE_SECRET_KEY'], - ) as storage: - storage: S3Client + # aioboto = aiobotocore_get_session() + # async with aioboto.create_client( + # 's3', + # endpoint_url=config['STORAGE_URL'], + # aws_access_key_id=config['STORAGE_ACCESS_KEY'], + # aws_secret_access_key=config['STORAGE_SECRET_KEY'], + # ) as storage: + # storage: S3Client - storage_bucket = config['UPLOAD_BUCKET'] - assert storage_bucket + # storage_bucket = config['UPLOAD_BUCKET'] + # assert storage_bucket - # Make the bucket if it doesn't exist. - exists = await check_bucket_exists(storage, storage_bucket) - if not exists: - await storage.create_bucket(Bucket=storage_bucket) - print("Created bucket", storage_bucket) - else: - print("Bucket", storage_bucket, "already exists") + # # Make the bucket if it doesn't exist. + # exists = await check_bucket_exists(storage, storage_bucket) + # if not exists: + # await storage.create_bucket(Bucket=storage_bucket) + # print("Created bucket", storage_bucket) + # else: + # print("Bucket", storage_bucket, "already exists") - async with aiohttp.ClientSession() as session: - channels = [download_channel_attachments(session, storage, vision, channel_id) for channel_id in CHANNEL_IDS] - memes = await asyncio.gather(*channels) + # async with aiohttp.ClientSession() as session: + # channels = [download_channel_attachments(session, storage, vision, channel_id) for channel_id in CHANNEL_IDS] + # memes = await asyncio.gather(*channels) asyncio.run(main()) diff --git a/migrations/README b/migrations/README new file mode 100644 index 0000000..98e4f9c --- /dev/null +++ b/migrations/README @@ -0,0 +1 @@ +Generic single-database configuration. \ No newline at end of file diff --git a/migrations/env.py b/migrations/env.py new file mode 100644 index 0000000..8606572 --- /dev/null +++ b/migrations/env.py @@ -0,0 +1,86 @@ +from logging.config import fileConfig + +from sqlalchemy import engine_from_config +from sqlalchemy import pool + +from alembic import context + +from dotenv import dotenv_values + +from db import Base + +# this is the Alembic Config object, which provides +# access to the values within the .ini file in use. +config = context.config + +env = dotenv_values(".env") +assert env['POSTGRES_URL'] +config.set_main_option('sqlalchemy.url', env['POSTGRES_URL']) + +# Interpret the config file for Python logging. +# This line sets up loggers basically. +if config.config_file_name is not None: + fileConfig(config.config_file_name) + +# add your model's MetaData object here +# for 'autogenerate' support +# from myapp import mymodel +# target_metadata = mymodel.Base.metadata +target_metadata = Base.metadata + +# other values from the config, defined by the needs of env.py, +# can be acquired: +# my_important_option = config.get_main_option("my_important_option") +# ... etc. + + +def run_migrations_offline() -> None: + """Run migrations in 'offline' mode. + + This configures the context with just a URL + and not an Engine, though an Engine is acceptable + here as well. By skipping the Engine creation + we don't even need a DBAPI to be available. + + Calls to context.execute() here emit the given string to the + script output. + + """ + url = config.get_main_option("sqlalchemy.url") + context.configure( + url=url, + target_metadata=target_metadata, + literal_binds=True, + dialect_opts={"paramstyle": "named"}, + ) + + with context.begin_transaction(): + context.run_migrations() + + +def run_migrations_online() -> None: + """Run migrations in 'online' mode. + + In this scenario we need to create an Engine + and associate a connection with the context. + + """ + connectable = engine_from_config( + config.get_section(config.config_ini_section, {}), + prefix="sqlalchemy.", + poolclass=pool.NullPool, + ) + + with connectable.connect() as connection: + context.configure( + connection=connection, target_metadata=target_metadata + ) + + with context.begin_transaction(): + context.run_migrations() + + +if context.is_offline_mode(): + run_migrations_offline() +else: + run_migrations_online() diff --git a/migrations/script.py.mako b/migrations/script.py.mako new file mode 100644 index 0000000..fbc4b07 --- /dev/null +++ b/migrations/script.py.mako @@ -0,0 +1,26 @@ +"""${message} + +Revision ID: ${up_revision} +Revises: ${down_revision | comma,n} +Create Date: ${create_date} + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +${imports if imports else ""} + +# revision identifiers, used by Alembic. +revision: str = ${repr(up_revision)} +down_revision: Union[str, None] = ${repr(down_revision)} +branch_labels: Union[str, Sequence[str], None] = ${repr(branch_labels)} +depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)} + + +def upgrade() -> None: + ${upgrades if upgrades else "pass"} + + +def downgrade() -> None: + ${downgrades if downgrades else "pass"} diff --git a/migrations/versions/e04bee35feab_create_memes_and_attachments_table.py b/migrations/versions/e04bee35feab_create_memes_and_attachments_table.py new file mode 100644 index 0000000..918cefc --- /dev/null +++ b/migrations/versions/e04bee35feab_create_memes_and_attachments_table.py @@ -0,0 +1,49 @@ +"""Create Memes and Attachments table + +Revision ID: e04bee35feab +Revises: +Create Date: 2024-04-08 10:45:47.138438 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = 'e04bee35feab' +down_revision: Union[str, None] = None +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('attachments', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('msg_id', sa.Integer(), nullable=False), + sa.Column('attributes', sa.JSON(), nullable=False), + sa.Column('vision', sa.JSON(), nullable=False), + sa.Column('message', sa.JSON(), nullable=False), + sa.Column('guild', sa.JSON(), nullable=False), + sa.Column('channel', sa.JSON(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.create_index(op.f('ix_attachments_msg_id'), 'attachments', ['msg_id'], unique=False) + op.create_table('memes', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('url', sa.String(), nullable=False), + sa.Column('text', sa.String(), nullable=False), + sa.Column('tags', sa.JSON(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('memes') + op.drop_index(op.f('ix_attachments_msg_id'), table_name='attachments') + op.drop_table('attachments') + # ### end Alembic commands ### diff --git a/requirements.txt b/requirements.txt index fd0437a..cc4f917 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,5 +3,7 @@ aiohttp google-cloud-vision meilisearch pillow -minio -aiobotocore \ No newline at end of file +aiobotocore +sqlalchemy +alembic +psycopg2-binary diff --git a/uploader.py b/uploader.py deleted file mode 100644 index faac011..0000000 --- a/uploader.py +++ /dev/null @@ -1,31 +0,0 @@ -from minio import Minio - -def upload(config, document, source_file): - assert config['MINIO_URL'] - - client = Minio(config['MINIO_URL'], - access_key=config['MINIO_ACCESS_KEY'], - secret_key=config['MINIO_SECRET_KEY'], - ) - - # The destination bucket and filename on the MinIO server - bucket_name = config['UPLOAD_BUCKET'] - destination_file = document.url - - # Make the bucket if it doesn't exist. - found = client.bucket_exists(bucket_name) - if not found: - client.make_bucket(bucket_name) - print("Created bucket", bucket_name) - else: - print("Bucket", bucket_name, "already exists") - - # Upload the file, renaming it in the process - client.fput_object( - bucket_name, destination_file, source_file, - ) - - print( - source_file, "successfully uploaded as object", - destination_file, "to bucket", bucket_name, - ) \ No newline at end of file