Files
pumpfun-bonkfun-bot_github/.github/workflows/spam-detection.yml
T
RecoordinateandGitHub b367191267 fix(ci): restore the undefined warningMessage in spam-detection workflow (#187)
The github-script step references warningMessage in createComment, but its
definition was removed in 9ac0c27 while the usage was kept. When a comment
tripped the threshold, the step threw 'ReferenceError: warningMessage is not
defined', which the surrounding try/catch swallowed — so the scam-warning
comment was never posted (only the label was applied). Restore the message,
built from the variables already in scope (author, foundPatterns,
suspiciousLinks).
2026-08-22 12:46:33 +02:00

130 lines
4.7 KiB
YAML

name: Suspicious Comment Detection
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
jobs:
check_comment:
runs-on: ubuntu-latest
steps:
- name: Check for suspicious patterns
uses: actions/github-script@v6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
try {
const comment = context.payload.comment;
const body = comment.body.toLowerCase();
const author = comment.user.login;
// Suspicious patterns
const suspiciousPatterns = [
'support team',
'customer service',
'telegram',
'whatsapp',
'contact us',
'click here',
'support group',
't.me/',
'wa.me/',
'support chat',
'live chat',
'support ticket',
'ticket id',
'live support',
'support line',
'support agent',
'support network',
'dedicated support',
'personalized assistance',
'opened for you',
'kindly talk to',
'we apologize',
'live chat with an agent',
'chat button',
'dapp portal',
'decentralized dapp',
'access the portal',
'report your request',
'start a conversation',
'click the chat',
'for assistance',
'reach out to',
'through the chat',
'portal',
'help center',
'ticket',
'this will be review',
'bringing this to our notice',
'initiate a chat',
'regards',
'hello @',
'thanks for bringing',
];
// Add pattern weight scoring
const patternWeights = {
'ticket id': 2,
'support team': 2,
'live support': 2,
'help center': 2,
// Regular patterns have weight of 1
};
// Calculate spam score
let spamScore = 0;
const foundPatterns = suspiciousPatterns.filter(pattern => {
if (body.includes(pattern)) {
spamScore += patternWeights[pattern] || 1;
return true;
}
return false;
});
// Check for external links (excluding common legitimate domains)
const hasExternalLinks = body.includes('http') || body.includes('www');
const hasGithubLinks = body.includes('github.com');
const suspiciousLinks = hasExternalLinks && !hasGithubLinks;
// Trigger on either multiple patterns or high spam score
if (foundPatterns.length > 2 || spamScore >= 3) {
const warningMessage =
`⚠️ Potential scam detected in comment by ${author}:\n` +
`- Suspicious patterns found: ${foundPatterns.join(', ')}\n` +
`${suspiciousLinks ? '- Contains external links\n' : ''}` +
`\n@${context.repo.owner} Please review this comment.`;
try {
// Create a warning comment
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.issue ? context.payload.issue.number : context.payload.pull_request.number,
body: warningMessage
});
} catch (e) {
console.log('Failed to create comment:', e);
}
try {
// Add 'potential-scam' label
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.issue ? context.payload.issue.number : context.payload.pull_request.number,
labels: ['potential-scam']
});
} catch (e) {
console.log('Failed to add label:', e);
}
}
} catch (e) {
console.log('Workflow error:', e);
// Still mark as failure but with more context
core.setFailed(`Workflow failed: ${e.message}`);
}