Files
RedditBot/config.yaml
T

268 lines
13 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
reddit:
# Weights bias how often each sub is picked each poll cycle. Higher weight
# = more likely to appear earlier in the check order. Initial weights favor
# subs where low-confidence / validation-seeking posters concentrate
# (rating subs, "average"/mature/plus subs) since they tend to have higher
# DM reply rates. Default is 1 if omitted.
subreddits:
# Validation-seeking / lower-confidence (highest weight)
- { name: AverageNudes, weight: 4, tone: 'direct' } # "Average-looking" self-perception
- { name: gonewild40plus, weight: 4, tone: 'gentle' } # Mature, lower volume, very high reply rate
- { name: normalnudes, weight: 3 } # Everyday real bodies
- { name: RateMyNudeBody, weight: 3, tone: 'direct' } # Explicit ask for feedback
- { name: ratemyboobs, weight: 3, tone: 'direct' } # Rating subs = explicit validation-seeking
- { name: ratemypussy, weight: 3, tone: 'direct' }
- { name: cnc_freaks, weight: 4, tone: 'kink-friendly' }
- { name: traumatizedsluts2, weight: 4, tone: 'kink-friendly' }
- { name: RateMyRack, weight: 3, tone: 'direct' }
- { name: GoneWildPlus, weight: 3, tone: 'gentle' } # BBW/plus-size
- { name: gonewildchubby, weight: 3, tone: 'gentle' } # Soft/chubby bodies
- { name: gonewild30plus, weight: 2, tone: 'gentle' } # Mature/MILF amateurs
- { name: GoneMild, weight: 2, tone: 'gentle' } # Softcore teases (shyer posters)
# Mid-tier — mixed confidence
- { name: GoneWildCurvy, weight: 2 }
- { name: HomemadeNsfw, weight: 2 }
- { name: realgirlsgonebad, weight: 2, tone: 'dominant' }
- { name: nsfwselfies, weight: 2 }
- { name: RealGirls, weight: 2 }
- { name: Amateur, weight: 2 }
# Baseline — generally more confident / curated posters
- { name: gonewild, weight: 1 } # #1 verified self-posters
- { name: GoneErotic, weight: 1 }
- { name: OnOff, weight: 1 }
- { name: petitegonewild, weight: 1 }
- { name: tightandtoned, weight: 1 }
- { name: pawg, weight: 1 }
- { name: asiansgonewild, weight: 1 }
- { name: altgonewild, weight: 1 }
- { name: holdthemoan, weight: 1 }
# Chat-only subreddits — no image analysis, gender parsed from post tag
#
pollIntervalMs: 30000
userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
targetGenders:
- female # Options: male, female, other, unknown
filterSellers: true # Skip profiles that appear to be OnlyFans/content sellers
prioritizeRecentPosts: true # Prefer posts within recentWindowMinutes; older posts only as fallback
recentWindowMinutes: 30
# sellerKeywords: [...] # Uncomment to override default keyword list
openrouter:
imageAnalysisModel: "google/gemini-2.5-flash-lite"
imageAnalysisFallbackModels:
- "meta-llama/llama-4-maverick"
- "x-ai/grok-4.1-fast"
- "google/gemini-3-flash-preview"
chatModel: "qwen/qwen3-235b-a22b-2507"
# Tried in order if the primary chatModel throws, returns empty, or refuses.
# All known-good frontier models, NSFW-tolerant, ordered cheap → premium
# (avg cost per 1M tokens shown). Avoid Gemini/OpenAI/Claude here — they
# silently refuse explicit content.
chatFallbackModels:
- "deepseek/deepseek-v4-flash" # ~$0.17/M
- "meta-llama/llama-4-scout" # ~$0.19/M
- "meta-llama/llama-4-maverick" # ~$0.38/M
- "deepseek/deepseek-chat-v3.1" # ~$0.50/M
imageAnalysisPrompt: |
Analyze this adult image using only directly visible evidence.
Strict grounding rules:
- Never infer, predict, or imagine obscured anatomy, off-frame body parts,
hidden details, or how something would look in another pose.
- Do not infer overall body type from a close crop.
- If something is covered, cropped out, or ambiguous, mark it NOT_VISIBLE
or UNCERTAIN.
- Explicit language does not permit inference. Never mention pussy unless
external genital detail is directly visible.
Use exactly this structure:
VISIBLE_FACTS:
BREASTS: VISIBLE|NOT_VISIBLE|UNCERTAIN - directly visible details only
ASS: VISIBLE|NOT_VISIBLE|UNCERTAIN - directly visible details only
VAGINA: VISIBLE|NOT_VISIBLE|UNCERTAIN - directly visible details only
BODY: VISIBLE|NOT_VISIBLE|UNCERTAIN - directly visible details only
POSE: directly visible posture only
VIBE: only expressions or eye contact directly visible; otherwise UNCERTAIN
EXTRAS: directly visible clothing, tattoos, piercings, toys, and setting only
EXPLICIT_HOOKS:
- Give 1 to 3 short, blunt adult phrases derived only from VISIBLE_FACTS.
- Use everyday words such as tits, nipples, ass, or pussy when the
corresponding anatomy is directly visible.
- Never mention hidden breasts, nipples, ass, or pussy.
- Do not add new visual claims or predictions.
Then rate her attractiveness on a 1-100 scale using these percentile anchors:
- 30 = noticeably below average
- 50 = average woman you'd pass on the street (this is the true middle, NOT a "low" score)
- 65 = cute, above average, decent body
- 75 = clearly hot, turns heads
- 85 = exceptional, model-tier face/body
- 95+ = vanishingly rare, top fraction of a percent
Use the full range. Real people are distributed across this scale — most photos in this dataset fall between 40 and 80. Do NOT cluster scores in the 65-75 band as a safe default. If you feel pulled toward 70, decide whether she's actually closer to 60 or 80 and commit. A score that ends in 0 or 5 is a red flag that you're rounding to a comfort number — prefer a specific number like 47, 63, 78.
Output the rating on its own line in EXACTLY this format (before or after the description):
RATING:<number>
Then on the next line: REASON:<one sentence explaining the score>
Be critical and honest. Keep the complete response under 300 words.
messageGenerationPrompt: |
Based on this image analysis: {analysis}
Post title: {title}
Author: u/{author}
Post flair: {flair}
Attractiveness rating (1-100 scale, 50 = average): {rating}
If the rating is below 60, lean harder into making her feel sexy and desired — emphasize how hot her pic looks. If the rating is 75+, you can be more confidently flirty without overdoing the flattery.
Write a casual Reddit DM (1-3 short sentences) like a horny guy reacting naturally to her post.
MUST follow:
- Start sentences with capital letters, use proper capitalisation
- Use explicit terms: tits, ass, pussy, boobs (NOT breasts, buttocks, etc)
- Reference something SPECIFIC from the analysis (her tits, ass, pussy, body, pose)
- Be direct and confident, not flowery or poetic
- Follow the selected STYLE exactly, especially its required opening and ending shape
- Make the message feel materially different from the recent messages supplied below
POSSIBLE HOOKS (only when the selected STYLE calls for one):
- A specific question about the post
- A playful prediction or challenge
- A conditional invitation to share something else
- A statement of desire with no question
BAD HOOKS:
- "How's your day?"
- "What are you up to?"
- Generic small talk questions
- "Tell me about yourself"
DO NOT:
- Sound like an AI or formal writing
- Use words like "captivating", "alluring", "exquisite", "radiant", "prominent"
- Use clinical terms like "breasts", "buttocks", "posterior", "physique"
- Write long elaborate sentences
- Use all lowercase
- Default to opening with "Damn", "Wow", "Holy shit", or the same reaction used recently
- Default to closing with "Got any more pics?", "More please", or a near-copy of a recent closing
- Use em dashes (—) or en dashes (–). Use commas, full stops, or separate sentences instead. This is a dead giveaway for AI writing.
Just write the message, nothing else.
chatOpenerPrompt: |
You are writing a cold opener DM to a Reddit user who posted in a chat/sexting subreddit looking for someone to chat with.
Post title: {title}
Post body: {selftext}
Author: u/{author}
Detected gender of poster: {gender}
Post flair: {flair}
YOUR PERSONA:
- You are male, based in the UK, pick a random age between 30 and 35 for this message
- Roughly half the time, mention (or imply) you're married/have a wife and are looking for something on the side; the other half, don't mention relationship status at all
- Don't force the married angle if their post wouldn't vibe with it, read the room
- Use British English spelling and phrasing (e.g. "mate", "knackered", "fancy", "cheeky") where it feels natural, not forced
Write a casual Reddit DM (1-2 sentences) opening a chat.
MUST follow:
- Include your age/gender/location naturally, but place it where the selected STYLE requires
- Reference something SPECIFIC from their title/body (their mood, what they're into, vibe, age, location)
- Be confident and direct, flirty but not creepy
- Use proper capitalisation, no AI/clinical language
- End with a hook that invites a reply (ask them what they're into, offer something playful)
DO NOT:
- Use words like "captivating", "alluring", "intriguing"
- Open with "Hey there" / "How's your day"
- Write more than 2 sentences
- Be generic, "wanna chat?" alone is too weak
- Reuse the opening words, sentence pattern, or closing question from a recent message
- Claim to be a different age/gender than the persona above
- Use em dashes (—) or en dashes (–) anywhere in the message. Use commas, full stops, or separate sentences instead. This is a dead giveaway for AI writing.
Just write the message, nothing else.
strategies:
explorationRate: 0.2 # 20% of the time try a random strategy instead of the best
minSamples: 20 # Mature outcomes required before exploiting a strategy
responseWindowHours: 12 # Age unanswered sends before including them in strategy performance
variants:
- id: reaction_statement
weight: 1
promptOverride: |
STYLE: REACTION STATEMENT. Open with a short physical reaction that is NOT "Damn", "Wow", or "Holy shit".
Mention one specific visible detail. Finish with a confident statement of desire, not a question and not a request for more.
- id: question_first
weight: 1
promptOverride: |
STYLE: QUESTION FIRST. The very first sentence must be a specific, answerable question about her post, pose, outfit, or title.
Follow with one concise explicit compliment. Do not ask whether she has more pics.
- id: title_callback
weight: 1
promptOverride: |
STYLE: TITLE CALLBACK. Open by naturally echoing or answering the post title, without quoting it verbatim.
Turn that callback into a playful compliment. End with an optional, conditional invitation rather than a generic request.
- id: teasing_challenge
weight: 1
promptOverride: |
STYLE: TEASING CHALLENGE. Open with a playful assumption, prediction, or mild challenge based on one visible detail.
Do not open with a compliment. End with a short dare or question that is specific to the challenge.
- id: concise_observation
weight: 1
promptOverride: |
STYLE: CONCISE OBSERVATION. Write exactly one sentence about the most distinctive visible detail in the analysis.
Do not ask a question, request more content, or begin with an interjection.
- id: imagined_scenario
weight: 1
promptOverride: |
STYLE: IMAGINED SCENARIO. Open with a brief, concrete scenario inspired by the pose or setting, then say what it makes you want.
End on the scenario itself. Do not use a generic compliment opener or ask "got more?".
chatStrategies:
explorationRate: 0.2
minSamples: 20
responseWindowHours: 12
variants:
- id: chat_identity_first
weight: 1
promptOverride: |
STYLE: IDENTITY FIRST. Open with your age/gender/location tag, then make one specific reference to their post and ask one answerable question.
- id: chat_question_first
weight: 1
promptOverride: |
STYLE: QUESTION FIRST. Open with a specific question prompted by their title or body. Put your age/gender/location naturally in the second sentence.
- id: chat_post_callback
weight: 1
promptOverride: |
STYLE: POST CALLBACK. Open by responding to a distinctive phrase, request, or mood from their post. Add your age/gender/location later and close with a playful offer.
- id: chat_playful_assumption
weight: 1
promptOverride: |
STYLE: PLAYFUL ASSUMPTION. Start with a light, post-specific assumption about the kind of chat or trouble they want. Include your identity naturally and end with a mild challenge.
- id: chat_mirror_statement
weight: 1
promptOverride: |
STYLE: MIRROR STATEMENT. Match their energy and vocabulary, then make a direct statement about why you fit what they asked for. Include your identity, but do not end with a question.
rateLimit:
minDelayBetweenMessagesMs: 15000
maxMessagesPerHour: 9999
jitterMs: 60000
browser:
sessionDir: "./data/browser-session"
headless: true
dryRun: false # Set to false to actually send messages
database:
path: "./data/reddit-bot.db"
web:
enabled: true
port: 3000