diff --git a/Pipfile b/Pipfile index 7ca0c63..da71969 100644 --- a/Pipfile +++ b/Pipfile @@ -7,7 +7,9 @@ name = "pypi" slack-bolt = "*" aiohttp = "*" aiomysql = "*" -dotenv = "*" +uvicorn = "*" +gunicorn = "*" +flask = "*" [dev-packages] diff --git a/Pipfile.lock b/Pipfile.lock index 2887db9..4e6ac4a 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "48c88a5d2737a4af0a4b0527f4c6ad2c7c3efafdeb018383274e887ba853bda0" + "sha256": "c15a725d7a97c336acc3f1198bfbdd80a2360883990bd018c6482960d2606860" }, "pipfile-spec": 6, "requires": { @@ -143,6 +143,14 @@ "markers": "python_version >= '3.7'", "version": "==23.1.0" }, + "blinker": { + "hashes": [ + "sha256:152090d27c1c5c722ee7e48504b02d76502811ce02e1523553b4cf8c8b3d3a8d", + "sha256:296320d6c28b006eb5e32d4712202dbcdcbf5dc482da298c2f44881c43884aaa" + ], + "markers": "python_version >= '3.7'", + "version": "==1.6.3" + }, "charset-normalizer": { "hashes": [ "sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843", @@ -239,6 +247,23 @@ "markers": "python_full_version >= '3.7.0'", "version": "==3.3.0" }, + "click": { + "hashes": [ + "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", + "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" + ], + "markers": "python_version >= '3.7'", + "version": "==8.1.7" + }, + "flask": { + "hashes": [ + "sha256:21128f47e4e3b9d597a3e8521a329bf56909b690fcc3fa3e477725aa81367638", + "sha256:cfadcdb638b609361d29ec22360d6070a77d7463dcb3ab08d2c2f2f168845f58" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==3.0.0" + }, "frozenlist": { "hashes": [ "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6", @@ -306,6 +331,23 @@ "markers": "python_version >= '3.8'", "version": "==1.4.0" }, + "gunicorn": { + "hashes": [ + "sha256:3213aa5e8c24949e792bcacfc176fef362e7aac80b76c56f6b5122bf350722f0", + "sha256:88ec8bff1d634f98e61b9f65bc4bf3cd918a90806c6f5c48bc5603849ec81033" + ], + "index": "pypi", + "markers": "python_version >= '3.5'", + "version": "==21.2.0" + }, + "h11": { + "hashes": [ + "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", + "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761" + ], + "markers": "python_version >= '3.7'", + "version": "==0.14.0" + }, "idna": { "hashes": [ "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", @@ -314,6 +356,88 @@ "markers": "python_version >= '3.5'", "version": "==3.4" }, + "itsdangerous": { + "hashes": [ + "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44", + "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a" + ], + "markers": "python_version >= '3.7'", + "version": "==2.1.2" + }, + "jinja2": { + "hashes": [ + "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", + "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" + ], + "markers": "python_version >= '3.7'", + "version": "==3.1.2" + }, + "markupsafe": { + "hashes": [ + "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e", + "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e", + "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431", + "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686", + "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c", + "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559", + "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc", + "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb", + "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939", + "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c", + "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0", + "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4", + "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9", + "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575", + "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba", + "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d", + "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd", + "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3", + "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00", + "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155", + "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac", + "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52", + "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f", + "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8", + "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b", + "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007", + "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24", + "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea", + "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198", + "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0", + "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee", + "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be", + "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2", + "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1", + "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707", + "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6", + "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c", + "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58", + "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823", + "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779", + "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636", + "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c", + "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad", + "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee", + "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc", + "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2", + "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48", + "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7", + "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e", + "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b", + "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa", + "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5", + "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e", + "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb", + "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9", + "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57", + "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc", + "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc", + "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2", + "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11" + ], + "markers": "python_version >= '3.7'", + "version": "==2.1.3" + }, "multidict": { "hashes": [ "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9", @@ -394,6 +518,14 @@ "markers": "python_version >= '3.7'", "version": "==6.0.4" }, + "packaging": { + "hashes": [ + "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5", + "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7" + ], + "markers": "python_version >= '3.7'", + "version": "==23.2" + }, "pymysql": { "hashes": [ "sha256:4f13a7df8bf36a51e81dd9f3605fede45a4878fe02f9236349fd82a3f0612f96", @@ -419,6 +551,23 @@ "markers": "python_full_version >= '3.6.0'", "version": "==3.23.0" }, + "uvicorn": { + "hashes": [ + "sha256:1f9be6558f01239d4fdf22ef8126c39cb1ad0addf76c40e760549d2c2f43ab53", + "sha256:4d3cc12d7727ba72b64d12d3cc7743124074c0a69f7b201512fc50c3e3f1569a" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==0.23.2" + }, + "werkzeug": { + "hashes": [ + "sha256:3ffff4dcc32db52ef3cc94dff3000a3c2846890f3a5a51800a27b909c5e770f0", + "sha256:cbb2600f7eabe51dbc0502f58be0b3e1b96b893b05695ea2b35b43d4de2d9962" + ], + "markers": "python_version >= '3.8'", + "version": "==3.0.0" + }, "yarl": { "hashes": [ "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571", diff --git a/slackbot.py b/slackbot.py index 2bd2719..fa36008 100644 --- a/slackbot.py +++ b/slackbot.py @@ -5,6 +5,7 @@ import random from os import environ from pprint import pprint from slack_bolt.async_app import AsyncApp +from slack_bolt.adapter.asgi.async_handler import AsyncSlackRequestHandler import libs.block_utils as block_utils import libs.benv @@ -19,9 +20,14 @@ auto_react_lookup = { "U05ES1730UE": {"text": "clown_face", "chance": 3}, # mprice "U05FN1F9ZCG": {"text": "frannodders", "chance": 4}, # blove "U05EY6DQR9R": {"text": "kekw", "chance": 4}, # jfox + "U05ERL26A3G": {"text": "jacoborg", "chance": 3},# jborg + "U05F0NWDH9S": {"text": "usb-c", "chance": 3}, #jjennings } -app = AsyncApp(token=environ.get("SLACK_BOT_TOKEN")) +app = AsyncApp(token=environ.get("SLACK_BOT_TOKEN"), signing_secret=environ.get('SLACK_SIGNING_SECRET')) +api = AsyncSlackRequestHandler(app) + + messages_already_reacted = {} @@ -39,17 +45,17 @@ async def reaction_add(body, logger, ack, say, client): reactions = await client.reactions_get( channel=event["item"]["channel"], timestamp=event["item"]["ts"] ) - for reaction in reactions.data["message"]["reactions"]: - if reaction["name"] == "clown_face": - if ( - int(reaction["count"]) >= 3 - and messages_already_reacted.get(event["item"]["ts"], False) - is False - ): - messages_already_reacted[event["item"]["ts"]] = True - await say( - f"Pricey has been clown reacted {reaction['count']} times on a recent post" - ) +# for reaction in reactions.data["message"]["reactions"]: +# if reaction["name"] == "clown_face": +# if ( +# int(reaction["count"]) >= 3 +# and messages_already_reacted.get(event["item"]["ts"], False) +# is False +# ): +# messages_already_reacted[event["item"]["ts"]] = True +# await say( +# f"Pricey has been clown reacted {reaction['count']} times on a recent post" +# ) @app.event("reaction_removed") @@ -57,10 +63,6 @@ async def reaction_del(body, logger, ack): await ack() -@app.message(":glass_of_milk:") -async def milk(body, ack, say, logger): - await say(":glass_of_milk:") - @app.event(event="message") async def handle_message_events(body, say, ack, logger, client, message, response): @@ -82,60 +84,60 @@ async def handle_message_events(body, say, ack, logger, client, message, respons text = event.get("text") if text == "x": - await ack() + await say("hi") pprint(environ) - if text == "!milk": - await ack() - members = await client.conversations_members(channel=channel_id) - members = members["members"] - member_data = await client.users_info(user=members[0]) - await client.reactions_add( - channel=channel_id, name="glass_of_milk", timestamp=message["ts"] - ) +# if text == "!milk": +# await ack() +# members = await client.conversations_members(channel=channel_id) +# members = members["members"] +# member_data = await client.users_info(user=members[0]) +# await client.reactions_add( +# channel=channel_id, name="glass_of_milk", timestamp=message["ts"] +# ) # pprint(member_data.data) # await say("test") - if text == "vader": - await ack() - blocks = await block_utils.image_block( - "https://benjamyn.love/vader.gif", "I fixed it mother bitch" - ) - await say(blocks=blocks) +# if text == "vader": +# await ack() +# blocks = await block_utils.image_block( +# "https://benjamyn.love/vader.gif", "I fixed it mother bitch" +# ) +# await say(blocks=blocks) - if text == "test image action": - await ack() - blocks = await block_utils.image_block( - "https://benjamyn.love/topright.png", "Top right buddy" - ) - await say(blocks=blocks) +# if text == "test image action": +# await ack() +# blocks = await block_utils.image_block( +# "https://benjamyn.love/topright.png", "Top right buddy" +# ) +# await say(blocks=blocks) - if text == "gimmie": - pool = await aiomysql.create_pool( - host=environ.get("MYSQL_HOST"), - port=int(environ.get("MYSQL_PORT")), - user=environ.get("MYSQL_USER"), - password=environ.get("MYSQL_PASS"), - db=environ.get("MYSQL_DB"), - loop=asyncio.get_event_loop(), - ) +# if text == "gimmie": +# pool = await aiomysql.create_pool( +# host=environ.get("MYSQL_HOST"), +# port=int(environ.get("MYSQL_PORT")), +# user=environ.get("MYSQL_USER"), +# password=environ.get("MYSQL_PASS"), +# db=environ.get("MYSQL_DB"), +# loop=asyncio.get_event_loop(), +# ) - async with pool.acquire() as conn: - async with conn.cursor() as cur: - await cur.execute( - "select quote from tblQuotes order by rand() limit 1;" - ) - (r,) = await cur.fetchone() - await say(text=r.decode()) - pool.close() - await pool.wait_closed() - await ack() +# async with pool.acquire() as conn: +# async with conn.cursor() as cur: +# await cur.execute( +# "select quote from tblQuotes order by rand() limit 1;" +# ) +# (r,) = await cur.fetchone() +# await say(text=r.decode()) +# pool.close() +# await pool.wait_closed() +# await ack() @app.command(command="/socialcredit") async def handle_social_credit(body, client, say, logger, ack): await ack() user_id = body.get("user_id") - await say(f"<@{user_id}> has so many social credits, long live poo bear") + await say(f"This feature is under development") @app.command(command="/test") diff --git a/system/priceybot.service b/system/priceybot.service new file mode 100644 index 0000000..ab2f7f6 --- /dev/null +++ b/system/priceybot.service @@ -0,0 +1,11 @@ +[Unit] +Description=Gunicorn instance to serve priceybot +After=network.target + +[Service] +WorkingDirectory=/opt/PriceyBot3 +Environment="PATH=/root/.local/share/virtualenvs/PriceyBot3-O3EaYqVe/bin" +ExecStart=/root/.local/share/virtualenvs/PriceyBot3-O3EaYqVe/bin/gunicorn --workers 4 --bind unix:priceybot.sock slackbot:api -k uvicorn.workers.UvicornWorker + +[Install] +WantedBy=multi-user.target \ No newline at end of file