Parcourir la source

discord notify

tomoya il y a 1 semaine
Parent
commit
fd868475b4

+ 48 - 59
backend/app/app/api/api_v1/endpoints/edm_saas_api.py

@@ -26,6 +26,7 @@ import app.schemas as schemas
 from app.core.celery_app import celery_app
 from app.core.config import settings
 import requests
+from discord_webhook import DiscordWebhook
 
 BACKEND_ZIP_STORAGE = Path("/app").joinpath(settings.BACKEND_ZIP_STORAGE)
 LOCAL_ZIP_STORAGE = Path("/").joinpath(settings.LOCAL_ZIP_STORAGE)
@@ -146,17 +147,14 @@ async def update_detect_info(
     video_data['lang'] = lang
     background_tasks.add_task(wait_finish, video_data)
     
-    headers = {
-        'Content-Type': 'application/json'
-    }
-    data = {
-        'message':f'cloud-choozmo-com\n \
-                    Video\n \
-                    user: {username}\n \
-                    video: {video_data["id"]}\n \
-                    state: queuing'     
-    }
-    data = requests.post(LINE_URL, headers=headers, json=data) 
+    message = f'edm-choozmo-com\n \
+                Video\n \
+                user: {username}\n \
+                video: {video_data["id"]}\n \
+                state: queuing'     
+    webhook = DiscordWebhook(url=Discord_URL, content=message)
+    response = webhook.execute()
+    print(f"Discord response: {response.status_code}")
     return  JSONResponse(return_msg, background=background_tasks)
     
 async def wait_finish(video_data:dict): 
@@ -174,18 +172,16 @@ async def wait_finish(video_data:dict):
     video = supabase.table(VIDEO_TABLE).update({"progress_state":"STARTED"}).eq('id', video_data['id']).execute()
     msg_data = f"{video_data['stored_filename']}:STARTED"
     await publish(msg_data)
-    headers = {
-        'Content-Type': 'application/json'
-    }
-    data = {
-        'message':f'cloud-choozmo-com\n \
-                    Video\n \
-                    user: {video_data["owner_id"]}\n \
-                    membership: {video_data["membership_status"]}\n \
-                    video: {video_data["id"]}\n \
-                    state: start'     
-    }
-    data = requests.post(Discord_URL, headers=headers, json=data) 
+    message = f'edm-choozmo-com\n \
+                Video\n \
+                user: {video_data["owner_id"]}\n \
+                membership: {video_data["membership_status"]}\n \
+                video: {video_data["id"]}\n \
+                state: start'     
+    
+    webhook = DiscordWebhook(url=Discord_URL, content=message)
+    response = webhook.execute()
+    print(f"Discord response: {response.status_code}")
     while True:
         await asyncio.sleep(1)
         if task.state != "STARTED":
@@ -200,50 +196,43 @@ async def wait_finish(video_data:dict):
                 # video.length = int(time)
                 pass
             msg_data = f"{video_data['stored_filename']}:SUCCESS:{int(time)}"
-            headers = {
-                'Content-Type': 'application/json'
-            }
-            data = {
-                'message':f'cloud-choozmo-com\n \
-                            Video\n \
-                            user: {video_data["owner_id"]}\n \
-                            membership: {video_data["membership_status"]}\n \
-                            video: {video_data["id"]}\n \
-                            state: success'    
-            }
-            data = requests.post(Discord_URL, headers=headers, json=data) 
+            message = f'edm-choozmo-com\n \
+                        Video\n \
+                        user: {video_data["owner_id"]}\n \
+                        membership: {video_data["membership_status"]}\n \
+                        video: {video_data["id"]}\n \
+                        state: success'    
+    
+            webhook = DiscordWebhook(url=Discord_URL, content=message)
+            response = webhook.execute()
+            print(f"Discord response: {response.status_code}") 
         
         else:
             video = supabase.table(VIDEO_TABLE).update({"progress_state":"FAILUR", "error_message":str(task.result)}).eq('id', video_data['id']).execute()
             msg_data = f"{video_data['stored_filename']}:FAILURE:{task.result}" 
-            headers = {
-                'Content-Type': 'application/json'
-            }
-            data = {
-                'message':f'cloud-choozmo-com\n \
-                            Video\n \
-                            user: {video_data["owner_id"]}\n \
-                            membership: {video_data["membership_status"]}\n \
-                            video: {video_data["id"]}\n \
-                            state: success'    
-            }
-
-    elif task.state == "FAILURE":
-        video = supabase.table(VIDEO_TABLE).update({"progress_state":"FAILURE", "error_message":str(task.result)}).eq('id', video_data['id']).execute()
-        msg_data = f"{video_data['stored_filename']}:FAILURE:{task.result}"
-
-        headers = {
-            'Content-Type': 'application/json'
-        }
-        data = {
-            'message':f'cloud-choozmo-com\n \
+            message = f'edm-choozmo-com\n \
                         Video\n \
                         user: {video_data["owner_id"]}\n \
                         membership: {video_data["membership_status"]}\n \
                         video: {video_data["id"]}\n \
-                        state: failure'     
-        }
-        data = requests.post(Discord_URL, headers=headers, json=data) 
+                        state: failure:{task.result}'    
+            webhook = DiscordWebhook(url=Discord_URL, content=message)
+            response = webhook.execute()
+            print(f"Discord response: {response.status_code}")
+
+    elif task.state == "FAILURE":
+        video = supabase.table(VIDEO_TABLE).update({"progress_state":"FAILURE", "error_message":str(task.result)}).eq('id', video_data['id']).execute()
+        msg_data = f"{video_data['stored_filename']}:FAILURE:{task.result}"
+        message = f'edm-choozmo-com\n \
+                    Video\n \
+                    user: {video_data["owner_id"]}\n \
+                    membership: {video_data["membership_status"]}\n \
+                    video: {video_data["id"]}\n \
+                    state: failure:{task.result}'     
+        
+        webhook = DiscordWebhook(url=Discord_URL, content=message)
+        response = webhook.execute()
+        print(f"Discord response: {response.status_code}")
 
     await publish(msg_data)
 

+ 64 - 52
backend/app/app/api/api_v1/endpoints/videos.py

@@ -17,10 +17,12 @@ from pathlib import Path
 from app.db.session import SessionLocal
 import requests
 import asyncio
+from discord_webhook import DiscordWebhook
 
 BACKEND_ZIP_STORAGE = Path("/app").joinpath(settings.BACKEND_ZIP_STORAGE)
 LOCAL_ZIP_STORAGE = Path("/").joinpath(settings.LOCAL_ZIP_STORAGE)
 
+Discord_URL = 'https://discord.com/api/webhooks/1348921334335541351/HU6tmFAfVcLdVcZjhy-qaqcbsoAhU_SdgvonujHi4S3HN-Rt9g9J2BIfi2yLslfc0ADb'
 LINE_URL = 'https://notify-api.line.me/api/notify'
 LINE_TOKEN = 'o8dqdVL2k8aiWO4jy3pawZamBu53bbjoSh2u0GJ7F0j'
 
@@ -134,17 +136,16 @@ def upload_plot(
     video_data['lang'] = lang
     background_tasks.add_task(wait_finish, video_data)
 
-    headers = {
-        'Authorization': 'Bearer ' + LINE_TOKEN    
-    }
-    data = {
-        'message':f'cloud-choozmo-com\n \
-                    Video\n \
-                    user: {current_user.id}\n \
-                    video: {video_data["id"]}\n \
-                    state: queuing'     
-    }
-    data = requests.post(LINE_URL, headers=headers, data=data) 
+    message = f'edm-choozmo-com\n \
+                Video\n \
+                user: {video_data["owner_id"]}\n \
+                membership: {video_data["membership_status"]}\n \
+                video: {video_data["id"]}\n \
+                state: start'     
+    
+    webhook = DiscordWebhook(url=Discord_URL, content=message)
+    response = webhook.execute()
+    print(f"Discord response: {response.status_code}")
     return  JSONResponse(return_msg, background=background_tasks)
 
 async def wait_finish(video_data:dict): 
@@ -166,47 +167,60 @@ async def wait_finish(video_data:dict):
     db.close()
     msg_data = f"{video_data['stored_filename']}:STARTED"
     await publish(msg_data)
-    headers = {
-        'Authorization': 'Bearer ' + LINE_TOKEN    
-    }
-    data = {
-        'message':f'cloud-choozmo-com\n \
-                    Video\n \
-                    user: {video_data["owner_id"]}\n \
-                    membership: {video_data["membership_status"]}\n \
-                    video: {video_data["id"]}\n \
-                    state: start'     
-    }
-    data = requests.post(LINE_URL, headers=headers, data=data) 
+    message = f'edm-choozmo-com\n \
+                Video\n \
+                user: {video_data["owner_id"]}\n \
+                membership: {video_data["membership_status"]}\n \
+                video: {video_data["id"]}\n \
+                state: start'     
+    
+    webhook = DiscordWebhook(url=Discord_URL, content=message)
+    response = webhook.execute()
+    print(f"Discord response: {response.status_code}") 
     while True:
         await asyncio.sleep(1)
         if task.state != "STARTED":
             break
 
     if task.state == "SUCCESS":
-        db = SessionLocal()
-        video = db.query(models.Video).get(video_data['id'])
-        user = db.query(models.User).get(video_data['owner_id'])
-        video.progress_state = "SUCCESS" 
-        if time := task.result:
-            user.available_time -= int(time) if int(time) <= user.available_time else 0
-            video.length = int(time)
-        db.commit()
-        db.close()
-        msg_data = f"{video_data['stored_filename']}:SUCCESS:{int(time)}"
-        headers = {
-            'Authorization': 'Bearer ' + LINE_TOKEN    
-        }
-        data = {
-            'message':f'cloud-choozmo-com\n \
+        if (time := task.result) and str(time).isdigit():
+            db = SessionLocal()
+            video = db.query(models.Video).get(video_data['id'])
+            user = db.query(models.User).get(video_data['owner_id'])
+            video.progress_state = "SUCCESS" 
+            if time := task.result:
+                user.available_time -= int(time) if int(time) <= user.available_time else 0
+                video.length = int(time)
+            db.commit()
+            db.close()
+            msg_data = f"{video_data['stored_filename']}:SUCCESS:{int(time)}"
+            message = f'edm-choozmo-com\n \
                         Video\n \
                         user: {video_data["owner_id"]}\n \
                         membership: {video_data["membership_status"]}\n \
                         video: {video_data["id"]}\n \
                         state: success'    
-        }
-        data = requests.post(LINE_URL, headers=headers, data=data) 
 
+            webhook = DiscordWebhook(url=Discord_URL, content=message)
+            response = webhook.execute()
+            print(f"Discord response: {response.status_code}") 
+        else:
+            db = SessionLocal()
+            video = db.query(models.Video).get(video_data['id'])
+            video.progress_state = "FAILURE" 
+            db.commit()
+            db.close()
+            msg_data = f"{video_data['stored_filename']}:FAILURE"
+
+            message = f'edm-choozmo-com\n \
+                        Video\n \
+                        user: {video_data["owner_id"]}\n \
+                        membership: {video_data["membership_status"]}\n \
+                        video: {video_data["id"]}\n \
+                        state: failure:{task.result}'    
+            webhook = DiscordWebhook(url=Discord_URL, content=message)
+            response = webhook.execute()
+            print(f"Discord response: {response.status_code}")
     elif task.state == "FAILURE":
         db = SessionLocal()
         video = db.query(models.Video).get(video_data['id'])
@@ -215,18 +229,16 @@ async def wait_finish(video_data:dict):
         db.close()
         msg_data = f"{video_data['stored_filename']}:FAILURE"
 
-        headers = {
-            'Authorization': 'Bearer ' + LINE_TOKEN   
-        }
-        data = {
-            'message':f'cloud-choozmo-com\n \
-                        Video\n \
-                        user: {video_data["owner_id"]}\n \
-                        membership: {video_data["membership_status"]}\n \
-                        video: {video_data["id"]}\n \
-                        state: failure'     
-        }
-        data = requests.post(LINE_URL, headers=headers, data=data) 
+        message = f'edm-choozmo-com\n \
+                    Video\n \
+                    user: {video_data["owner_id"]}\n \
+                    membership: {video_data["membership_status"]}\n \
+                    video: {video_data["id"]}\n \
+                    state: failure:{task.result}'     
+        
+        webhook = DiscordWebhook(url=Discord_URL, content=message)
+        response = webhook.execute()
+        print(f"Discord response: {response.status_code}")
 
     await publish(msg_data)
 

+ 1 - 0
backend/app/pyproject.toml

@@ -39,6 +39,7 @@ edge-tts = "^7.0.0"
 langdetect = "^1.0.0"
 supabase = "^2.0.0"
 iso639-lang = "^2.6.0"
+discord-webhook = "^1.4.1"
 
 [tool.poetry.dev-dependencies]
 mypy = "^0.991"