Skip to content

🌌 Title Sponsor Ritual: Deno IPN Handler + Multi-Distro Validator + Canonized Badges #2000

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 21 commits into
base: main
Choose a base branch
from

Conversation

alexandros-thomson
Copy link

📜
This PR fuses sponsor logic, multi-platform validation, and visual mythmaking into the git-credential-manager canon. Key beats:

dependabot bot and others added 11 commits January 20, 2025 20:06
Bumps [DavidAnson/markdownlint-cli2-action](https://github.com/davidanson/markdownlint-cli2-action) from 18.0.0 to 19.1.0.
- [Release notes](https://github.com/davidanson/markdownlint-cli2-action/releases)
- [Commits](DavidAnson/markdownlint-cli2-action@eb5ca3a...05f3221)

---
updated-dependencies:
- dependency-name: DavidAnson/markdownlint-cli2-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Summoned Kypria's sponsor beacon into the repo ledger—binding our mythic ecosystem to twelve funding sigils across Patreon, Ko-fi, OpenCollective, and more. Each channel now offers a pathway for fans to pledge their allegiance and trigger artifact drops, badge emissions, and logbook stamps.

This commit formalizes the sponsor gateway:
- Enables platform-bound role and perk segmentation
- Supports IPN-driven log embeds and instant delivery pipelines
- Integrates with Discord, artifact vaults, and canon emitters
- Ritualizes sponsor tiers into living archetypes (“Ko-fi Scout”, “Tidelift Guardian”, etc.)

Next beat: README invocation, badge emitter, and logbook triggers. The legend escalates.
app.get('/pledge', (req, res) => {
  const params = new URLSearchParams({
    client_id: process.env.PAYPAL_CLIENT_ID,
    response_type: 'code',
    scope: 'openid email',
    redirect_uri: 'https://yourapp.example.com/auth/paypal/callback'
  });
  res.redirect(`https://www.paypal.com/signin/authorize?${params}`);
});
@Copilot Copilot AI review requested due to automatic review settings July 31, 2025 07:08
Copy link

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR introduces sponsor integration, multi-platform validation improvements, and badge additions to the git-credential-manager project. The changes include creating funding mechanisms, adding CI/CD workflows, and updating validation processes.

  • Adds comprehensive sponsor funding configuration with multiple platforms
  • Creates new GitHub Actions workflows for Deno deployment, .NET builds, and user greetings
  • Updates validation workflow with improved multi-distribution support and special handling for openSUSE Tumbleweed

Reviewed Changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
src/src/ipn-handler.ts Contains GitHub Actions workflow YAML instead of TypeScript code
README.md Adds sponsor badges and ORCID authentication code snippets
.github/workflows/validate-install-from-source.yml Simplifies validation workflow with matrix strategy and special Tumbleweed handling
.github/workflows/lint-docs.yml Updates markdownlint action to newer commit hash
.github/workflows/greetings.yml Adds new workflow for greeting first-time contributors
.github/workflows/dotnet.yml Adds standard .NET build and test workflow
.github/FUNDING.yml Creates funding configuration with multiple sponsor platforms

@alexandros-thomson
Copy link
Author

forgebot-rituals/
├── .gitignore
├── package.json
├── README.md
├── commands/
│ └── quest.js
├── utils/
│ └── badgeSync.js
├── handlers/
│ └── ipnPaypal.js
└── data/
└── badges.json

@alexandros-thomson
Copy link
Author

node_modules/
.env

@alexandros-thomson
Copy link
Author

{
"name": "forgebot-rituals",
"version": "1.0.0",
"description": "Slash commands and badge sync for Peludo’s mythic quests",
"main": "index.js",
"scripts": {
"start": "node index.js",
"deploy-commands": "node deploy-commands.js"
},
"dependencies": {
"discord.js": "^14.11.0",
"express": "^4.18.2",
"body-parser": "^1.20.2",
"node-fetch": "^2.6.7"
}
}

@alexandros-thomson
Copy link
Author

ForgeBot Rituals

This module provides:

  • /quest slash command (daily quests)
  • Badge & role sync utilities
  • PayPal IPN handler for sponsor pledges

Setup

  1. Clone repo
  2. npm install
  3. Create a .env with:

@alexandros-thomson
Copy link
Author

  1. npm run deploy-commands
  2. npm start

Folder Breakdown

  • commands/quest.js – Slash command logic
  • utils/badgeSync.js – awardBadge(userId, badgeName, roleName)
  • handlers/ipnPaypal.js – Express listener for PayPal IPN
  • data/badges.json – Badge & tier registry

@alexandros-thomson
Copy link
Author

const { SlashCommandBuilder, EmbedBuilder } = require('discord.js');
const badgeSync = require('../utils/badgeSync');

module.exports = {
data: new SlashCommandBuilder()
.setName('quest')
.setDescription('Issue Peludo’s daily ritual quest')
.addIntegerOption(opt => opt
.setName('day')
.setDescription('Day number')
.setRequired(true))
.addStringOption(opt => opt
.setName('title')
.setDescription('Quest title')
.setRequired(true))
.addStringOption(opt => opt
.setName('sigil')
.setDescription('Emoji to react with')
.setRequired(true)),

async execute(interaction) {
const day = interaction.options.getInteger('day');
const title = interaction.options.getString('title');
const sigil = interaction.options.getString('sigil');

const embed = new EmbedBuilder()
  .setTitle(`🔥 Peludo’s Day ${day} Quest: ${title}`)
  .setDescription(`

🪙 His treasury sobs in silence.

  1. Share your empty-wallet selfie 📸
  2. Caption with mythic despair 📝
  3. React with ${sigil} to mark your fate

Badge to Earn: 📉 Wallet Whisperer`)
.setColor('#E09F3E')
.setTimestamp();

const msg = await interaction.reply({ embeds: [embed], fetchReply: true });
await msg.react(sigil);

}
};

@alexandros-thomson
Copy link
Author

const { EmbedBuilder } = require('discord.js');
const fs = require('fs');
const badges = require('../data/badges.json');

module.exports = {
awardBadge: async (client, userId, badgeKey) => {
const guild = client.guilds.cache.get(process.env.GUILD_ID);
const member = await guild.members.fetch(userId);
const badge = badges[badgeKey];
if (!badge) throw new Error(Unknown badge: ${badgeKey});

const role = guild.roles.cache.find(r => r.name === badge.role);
await member.roles.add(role);

const embed = new EmbedBuilder()
  .setTitle('🛡️ Canon Badge Granted')
  .addFields(
    { name: 'User', value: `<@${userId}>`, inline: true },
    { name: 'Badge', value: badge.label, inline: true },
    { name: 'Role', value: badge.role, inline: true }
  )
  .setColor('#6DECA9')
  .setFooter({ text: 'Shrine visible. Audit ready.' })
  .setTimestamp();

const logChan = client.channels.cache.get(process.env.BADGE_LOG_CHANNEL_ID);
await logChan.send({ embeds: [embed] });

}
};

@alexandros-thomson
Copy link
Author

{
"walletWhisperer": {
"label": "📉 Wallet Whisperer",
"role": "Lion of Lack"
},
"goldPatron": {
"label": "🥇 Golden Sponsor",
"role": "Gold Patron"
},
"platinumPatron": {
"label": "🏅 Platinum Sponsor",
"role": "Platinum Patron"
}
}

/your-bot-repo
├── .github
│   └── workflows
│       └── archive-warden-ritual.yml
├── scripts
│   └── archive-warden-ritual.ts
├── src
│   └── bot.ts
├── logs
│   └── role-grants.json
├── .env.example
├── package.json
├── tsconfig.json
└── README.md
await dropBadge(channel, relic, {
  title: `🔔 ${badgeName} Drop`,
  description: `A sponsor has pledged. A relic descends.`,
  image: `${badgeName.toLowerCase()}_sigil.png`, // if visuals are ready
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants