don't commit distribution folder
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -3,5 +3,6 @@ node_modules | ||||
| .env | ||||
| *.log | ||||
| *.db | ||||
| /dist/ | ||||
|  | ||||
| /generated/prisma | ||||
|  | ||||
							
								
								
									
										133
									
								
								dist/main.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										133
									
								
								dist/main.js
									
									
									
									
										vendored
									
									
								
							| @ -1,133 +0,0 @@ | ||||
| import striptags from "striptags"; | ||||
| import { PrismaClient } from "../generated/prisma/client.js"; | ||||
| const prisma = new PrismaClient(); | ||||
| const getNotifications = async () => { | ||||
|     try { | ||||
|         const request = await fetch(`${process.env.PLEROMA_INSTANCE_URL}/api/v1/notifications?types[]=mention`, { | ||||
|             method: "GET", | ||||
|             headers: { | ||||
|                 Authorization: `Bearer ${process.env.INSTANCE_BEARER_TOKEN}`, | ||||
|             }, | ||||
|         }); | ||||
|         const notifications = await request.json(); | ||||
|         return notifications; | ||||
|     } | ||||
|     catch (error) { | ||||
|         throw new Error(error.message); | ||||
|     } | ||||
| }; | ||||
| const notifications = await getNotifications(); | ||||
| const storeUserData = async (notification) => { | ||||
|     try { | ||||
|         const user = await prisma.user.upsert({ | ||||
|             where: { userFqn: notification.status.account.fqn }, | ||||
|             update: { | ||||
|                 lastRespondedTo: new Date(Date.now()), | ||||
|             }, | ||||
|             create: { | ||||
|                 userFqn: notification.status.account.fqn, | ||||
|                 lastRespondedTo: new Date(Date.now()), | ||||
|             }, | ||||
|         }); | ||||
|     } | ||||
|     catch (error) { | ||||
|         throw new Error(error.message); | ||||
|     } | ||||
| }; | ||||
| const alreadyRespondedTo = async (notification) => { | ||||
|     try { | ||||
|         const duplicate = await prisma.response.findFirst({ | ||||
|             where: { pleromaNotificationId: notification.status.id }, | ||||
|         }); | ||||
|         if (duplicate) { | ||||
|             return true; | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
|     catch (error) { | ||||
|         throw new Error(error.message); | ||||
|     } | ||||
| }; | ||||
| const storePromptData = async (notification, ollamaResponseBody) => { | ||||
|     try { | ||||
|         await prisma.response.create({ | ||||
|             data: { | ||||
|                 response: ollamaResponseBody.response, | ||||
|                 request: striptags(notification.status.content), | ||||
|                 to: notification.account.fqn, | ||||
|                 pleromaNotificationId: notification.status.id, | ||||
|                 createdAt: new Date(Date.now()), | ||||
|             }, | ||||
|         }); | ||||
|     } | ||||
|     catch (error) { | ||||
|         throw new Error(error.message); | ||||
|     } | ||||
| }; | ||||
| const generateOllamaRequest = async (notification) => { | ||||
|     try { | ||||
|         if (striptags(notification.status.content).includes("!prompt") && | ||||
|             !notification.status.account.bot) { | ||||
|             if (process.env.ONLY_LOCAL_REPLIES === "true" && | ||||
|                 !notification.status.account.fqn.includes(`@${process.env.PLEROMA_INSTANCE_DOMAIN}`)) { | ||||
|                 return; | ||||
|             } | ||||
|             if (await alreadyRespondedTo(notification)) { | ||||
|                 // console.log( | ||||
|                 //   `Already responded to notification ID ${notification.status.id}. Canceling.` | ||||
|                 // ); | ||||
|                 return; | ||||
|             } | ||||
|             await storeUserData(notification); | ||||
|             const ollamaRequestBody = { | ||||
|                 model: process.env.OLLAMA_MODEL, | ||||
|                 system: process.env.OLLAMA_SYSTEM_PROMPT, | ||||
|                 prompt: striptags(notification.status.content), | ||||
|                 stream: false, | ||||
|             }; | ||||
|             const response = await fetch(`${process.env.OLLAMA_URL}/api/generate`, { | ||||
|                 method: "POST", | ||||
|                 body: JSON.stringify(ollamaRequestBody), | ||||
|             }); | ||||
|             const ollamaResponse = await response.json(); | ||||
|             await storePromptData(notification, ollamaResponse); | ||||
|             console.log(`${notification.status.account.fqn} asked:\n${notification.status.content}\nResponse:\n${ollamaResponse.response}`); | ||||
|             postReplyToStatus(notification, ollamaResponse); | ||||
|         } | ||||
|     } | ||||
|     catch (error) { | ||||
|         throw new Error(error.message); | ||||
|     } | ||||
| }; | ||||
| const postReplyToStatus = async (notification, ollamaResponseBody) => { | ||||
|     try { | ||||
|         const mentions = notification.status.mentions?.map((mention) => { | ||||
|             return mention.acct; | ||||
|         }); | ||||
|         let statusBody = { | ||||
|             content_type: "text/markdown", | ||||
|             status: ollamaResponseBody.response, | ||||
|             in_reply_to_id: notification.status.id, | ||||
|             to: mentions, | ||||
|         }; | ||||
|         const response = await fetch(`${process.env.PLEROMA_INSTANCE_URL}/api/v1/statuses`, { | ||||
|             method: "POST", | ||||
|             headers: { | ||||
|                 Authorization: `Bearer ${process.env.INSTANCE_BEARER_TOKEN}`, | ||||
|                 "Content-Type": "application/json", | ||||
|             }, | ||||
|             body: JSON.stringify(statusBody), | ||||
|         }); | ||||
|         if (!response.ok) { | ||||
|             throw new Error(`New status request failed: ${response.statusText}`); | ||||
|         } | ||||
|     } | ||||
|     catch (error) { | ||||
|         throw new Error(error.message); | ||||
|     } | ||||
| }; | ||||
| if (notifications) { | ||||
|     await Promise.all(notifications.map((notification) => { | ||||
|         generateOllamaRequest(notification); | ||||
|     })); | ||||
| } | ||||
		Reference in New Issue
	
	Block a user