reviewbot

Source code for the is-a.dev r...
Log | Files | Refs | README | LICENSE

opened.js (4628B)


      1 import fs from 'fs';
      2 import path from 'path';
      3 
      4 import { db, numberOfDays } from '../index.js';
      5 import { getNumberOfDays } from '../tools/numberofdays.js';
      6 
      7 const ignoreLabels = ['maintainer'];
      8 const newPRs = fs.readFileSync(
      9     path.join(import.meta.dirname, '../message/opened.md'),
     10     'utf8'
     11 );
     12 const draftPRs = fs.readFileSync(
     13     path.join(import.meta.dirname, '../message/draft.md'),
     14     'utf8'
     15 );
     16 
     17 // https://docs.github.com/en/webhooks/webhook-events-and-payloads#pull_request
     18 export async function opened(
     19     appOctokit,
     20     repoOwner,
     21     repoName,
     22     repoFullName,
     23     prNumber,
     24     prCreatedAt,
     25     prUsername,
     26     prDraft
     27 ) {
     28     console.log(
     29         `Received a open pull request event for #${prNumber} on https://github.com/${repoFullName}`
     30     );
     31     const labels = await appOctokit.rest.issues.listLabelsOnIssue({
     32         owner: repoOwner,
     33         repo: repoName,
     34         issue_number: prNumber,
     35     });
     36     const allLabels = labels.data.map((label) => label.name);
     37     if (ignoreLabels.some((label) => allLabels.includes(label))) {
     38         console.log(
     39             `#${prNumber} from https://github.com/${repoFullName} is by a maintainer, skipping pull request.`
     40         );
     41         return;
     42     }
     43     if (prDraft === true) {
     44         await appOctokit.rest.issues.createComment({
     45             owner: repoOwner,
     46             repo: repoName,
     47             issue_number: prNumber,
     48             body: draftPRs,
     49         });
     50         console.log(
     51             `Sent a draft message to #${prNumber} on https://github.com/${repoFullName}`
     52         );
     53     } else {
     54         await appOctokit.rest.issues.createComment({
     55             owner: repoOwner,
     56             repo: repoName,
     57             issue_number: prNumber,
     58             body: newPRs,
     59         });
     60         console.log(
     61             `Sent a opened message to #${prNumber} on https://github.com/${repoFullName}`
     62         );
     63     }
     64     // low priority check
     65     let res = await db
     66         .prepare(`SELECT * FROM LIST WHERE username = ?;`)
     67         .get(prUsername);
     68     if (res !== undefined) {
     69         let resJson = JSON.stringify(res);
     70         let parsed = JSON.parse(resJson);
     71         let date = new Date();
     72         if (
     73             parsed.username === prUsername &&
     74             getNumberOfDays(parsed.time, date) <= numberOfDays
     75         ) {
     76             let lowPriority = `
     77 # Low priority
     78 
     79 You're attempting to create a new pull request to bypass the low priority label placed on your previous pull request, #${parsed.prnumber}. Unfortunately, we've noticed this attempt, and we're applying the label you were trying to escape on this pull request, too.
     80 
     81 If you think this is a mistake then please contact [iostpa](https://github.com/iostpa).   
     82         `;
     83             await appOctokit.request(
     84                 'POST /repos/{owner}/{repo}/issues/{issue_number}/labels',
     85                 {
     86                     owner: repoOwner,
     87                     repo: repoName,
     88                     issue_number: prNumber,
     89                     labels: ['status: low priority'],
     90                 }
     91             );
     92             await appOctokit.rest.issues.createComment({
     93                 owner: repoOwner,
     94                 repo: repoName,
     95                 issue_number: prNumber,
     96                 body: lowPriority,
     97             });
     98             await db
     99                 .prepare(`UPDATE LIST SET prnumber = ? WHERE prnumber = ?;`)
    100                 .run(`${prNumber}`, `${parsed.prnumber}`);
    101             await db
    102                 .prepare(`UPDATE LIST SET time = ? WHERE prnumber = ?;`)
    103                 .run(prCreatedAt, `${prNumber}`);
    104             console.log(
    105                 `Auto-added, replaced with new PR number and sent low priority message to #${prNumber} on https://github.com/${repoFullName} because it was found in the database.`
    106             );
    107         } else if (
    108             parsed.username === prUsername &&
    109             getNumberOfDays(parsed.time, date) >= numberOfDays
    110         ) {
    111             await appOctokit.request(
    112                 'DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}',
    113                 {
    114                     owner: repoOwner,
    115                     repo: repoName,
    116                     issue_number: prNumber,
    117                     name: 'status: low priority',
    118                 }
    119             );
    120             await db
    121                 .prepare(`DELETE FROM LIST WHERE username = ?;`)
    122                 .run(parsed.username);
    123             console.log(
    124                 `Removed #${prNumber} from https://github.com/${repoFullName} from the low priority database as well as the label.`
    125             );
    126         }
    127     } else if (res === undefined) {
    128         return;
    129     }
    130 }
© notamitgamer • Site Built: 2026-07-21 13:58:23 UTC • git-mirror commit: 1037f62 [view raw info]
Originally created with stagit • modified by notamitgamer
Forked from github.com/notamitgamer/git-mirror