Ray Hackett Payment Hub
Monthly Archives: June 2025
App Builder – Change Log
https://www.paypal.com/myaccount/wallet
Create this file: .github/workflows/reclaim-cname.yml
YAML
name: Auto CNAME Reclaim
on:
push:
schedule:
– cron: ‘0 * * * *’
jobs:
reclaim:
runs-on: ubuntu-latest
steps:
– uses: actions/checkout@v3
– name: Ensure correct CNAME
run: |
echo “rayis.me” > CNAME
git config user.name “RayBot”
git config user.email “crh2123@icloud.com”
git add CNAME
git commit -m “Re-assert CNAME” || echo “No changes” git push origin main || echo “Already up-to-date”
9:00 AM script to run
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Crh2123/my-ai-auto/main/scripts/linkedin-sync.sh)” Sent from my iPhone
2 June, 2025 11:24
Python file checker
import json
import os
import random
from typing import List, Dict, Optional
# Supported bingo patterns (expandable)
BINGO_PATTERNS = {
‘blackout’: lambda card, called: all(num in called or num == ‘FREE’ for row in card for num in row),
‘four_corners’: lambda card, called: all(card[i][j] in called for i, j in [(0,0), (0,4), (4,0), (4,4)]), ‘diagonal’: lambda card, called: (
all(card[i][i] in called or card[i][i] == ‘FREE’ for i in range(5)) or all(card[i][4-i] in called or card[i][4-i] == ‘FREE’ for i in range(5)) ),
‘straight_line’: lambda card, called: (
any(all(num in called or num == ‘FREE’ for num in row) for row in card) or
any(all(row[i] in called or row[i] == ‘FREE’ for row in card) for i in range(5)) ),
# Add more patterns…
}
class BingoCard:
def __init__(self, numbers: List[List[str]], player_id: str): self.numbers = numbers
self.player_id = player_id
def check_win(self, called: List[str]) -> Optional[str]:
for pattern, check in BINGO_PATTERNS.items():
if check(self.numbers, called):
return pattern
return None
class BingoGame:
def __init__(self):
self.cards: List[BingoCard] = []
self.called_numbers: List[str] = []
def add_card(self, card: List[List[str]], player_id: str): self.cards.append(BingoCard(card, player_id))
def call_number(self, number: str):
if number not in self.called_numbers:
self.called_numbers.append(number)
def check_all_cards(self):
results = []
for card in self.cards:
pattern = card.check_win(self.called_numbers)
if pattern:
results.append({
‘player’: card.player_id,
‘pattern’: pattern,
‘message’: f”🎉 Player {card.player_id} wins with {pattern} pattern!” })
return results
def auto_detect_game_type(self) -> Dict[str, int]:
match_counts = {pattern: 0 for pattern in BINGO_PATTERNS} for card in self.cards:
for pattern, check in BINGO_PATTERNS.items():
if check(card.numbers, self.called_numbers):
match_counts[pattern] += 1
return match_counts
# Example usage
if __name__ == “__main__”:
game = BingoGame()
# Add sample cards
game.add_card([
[‘B1’, ‘I16’, ‘N31’, ‘G46’, ‘O61’],
[‘B2’, ‘I17’, ‘N32’, ‘G47’, ‘O62’],
[‘B3’, ‘I18’, ‘FREE’, ‘G48’, ‘O63’],
[‘B4’, ‘I19’, ‘N34’, ‘G49’, ‘O64’],
[‘B5’, ‘I20’, ‘N35’, ‘G50’, ‘O65′],
], player_id=’Player1’)
game.add_card([
[‘B6’, ‘I21’, ‘N36’, ‘G51’, ‘O66’],
[‘B7’, ‘I22’, ‘N37’, ‘G52’, ‘O67’],
[‘B8’, ‘I23’, ‘FREE’, ‘G53’, ‘O68’],
[‘B9’, ‘I24’, ‘N39’, ‘G54’, ‘O69’],
[‘B10′,’I25’, ‘N40’, ‘G55’, ‘O70′],
], player_id=’Player2’)
# Simulate some called numbers
for number in [‘B1′,’I16′,’N31′,’G46′,’O61′,’B2′,’I17′,’N32′,’G47′,’O62′,’B3′,’I18′,’G48′,’O63’]: game.call_number(number)
# Check for wins
wins = game.check_all_cards()
for win in wins:
print(win[‘message’])
# Show pattern detection stats
pattern_stats = game.auto_detect_game_type()
print(“\\nPattern Match Stats:”)
for pattern, count in pattern_stats.items():
if count > 0:
print(f”{pattern}: {count} potential matches”)
Upgraded bingo checker
import json
import os
import random
from typing import List, Dict, Optional
# Supported bingo patterns (expandable)
BINGO_PATTERNS = {
‘blackout’: lambda card, called: all(num in called or num == ‘FREE’ for row in card for num in row),
‘four_corners’: lambda card, called: all(card[i][j] in called for i, j in [(0,0), (0,4), (4,0), (4,4)]), ‘diagonal’: lambda card, called: (
all(card[i][i] in called or card[i][i] == ‘FREE’ for i in range(5)) or all(card[i][4-i] in called or card[i][4-i] == ‘FREE’ for i in range(5)) ),
‘straight_line’: lambda card, called: (
any(all(num in called or num == ‘FREE’ for num in row) for row in card) or
any(all(row[i] in called or row[i] == ‘FREE’ for row in card) for i in range(5)) ),
# Add more patterns…
}
class BingoCard:
def __init__(self, numbers: List[List[str]], player_id: str): self.numbers = numbers
self.player_id = player_id
def check_win(self, called: List[str]) -> Optional[str]:
for pattern, check in BINGO_PATTERNS.items():
if check(self.numbers, called):
return pattern
return None
class BingoGame:
def __init__(self):
self.cards: List[BingoCard] = []
self.called_numbers: List[str] = []
def add_card(self, card: List[List[str]], player_id: str): self.cards.append(BingoCard(card, player_id))
def call_number(self, number: str):
if number not in self.called_numbers:
self.called_numbers.append(number)
def check_all_cards(self):
results = []
for card in self.cards:
pattern = card.check_win(self.called_numbers)
if pattern:
results.append({
‘player’: card.player_id,
‘pattern’: pattern,
‘message’: f”🎉 Player {card.player_id} wins with {pattern} pattern!” })
return results
def auto_detect_game_type(self) -> Dict[str, int]:
match_counts = {pattern: 0 for pattern in BINGO_PATTERNS} for card in self.cards:
for pattern, check in BINGO_PATTERNS.items():
if check(card.numbers, self.called_numbers):
match_counts[pattern] += 1
return match_counts
# Example usage
if __name__ == “__main__”:
game = BingoGame()
# Add sample cards
game.add_card([
[‘B1’, ‘I16’, ‘N31’, ‘G46’, ‘O61’],
[‘B2’, ‘I17’, ‘N32’, ‘G47’, ‘O62’],
[‘B3’, ‘I18’, ‘FREE’, ‘G48’, ‘O63’],
[‘B4’, ‘I19’, ‘N34’, ‘G49’, ‘O64’],
[‘B5’, ‘I20’, ‘N35’, ‘G50’, ‘O65′],
], player_id=’Player1’)
game.add_card([
[‘B6’, ‘I21’, ‘N36’, ‘G51’, ‘O66’],
[‘B7’, ‘I22’, ‘N37’, ‘G52’, ‘O67’],
[‘B8’, ‘I23’, ‘FREE’, ‘G53’, ‘O68’],
[‘B9’, ‘I24’, ‘N39’, ‘G54’, ‘O69’],
[‘B10′,’I25’, ‘N40’, ‘G55’, ‘O70′],
], player_id=’Player2’)
# Simulate some called numbers
for number in [‘B1′,’I16′,’N31′,’G46′,’O61′,’B2′,’I17′,’N32′,’G47′,’O62′,’B3′,’I18′,’G48′,’O63’]: game.call_number(number)
# Check for wins
wins = game.check_all_cards()
for win in wins:
print(win[‘message’])
# Show pattern detection stats
pattern_stats = game.auto_detect_game_type()
print(“\\nPattern Match Stats:”)
for pattern, count in pattern_stats.items():
if count > 0:
print(f”{pattern}: {count} potential matches”)
Do it all script?
# STEP 1: Install Node.js (via Homebrew)
brew install node
# STEP 2: Create agent folder and set up Node project
mkdir raysuite-agent && cd raysuite-agent
npm init -y
# STEP 3: Install required libraries
npm install simple-git express ngrok dotenv
# STEP 4: Create .env file for GitHub token and repo
cat < .env
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxxxxx
REPO=ray2407/bingo-checker
EOF
# STEP 5: Create bridge.js remote control agent
cat < bridge.js
require(‘dotenv’).config();
const simpleGit = require(‘simple-git’);
const express = require(‘express’);
const app = express();
const git = simpleGit();
const port = 3000;
app.use(express.json());
app.post(‘/push’, async (req, res) => {
try {
const { message, fileName, content } = req.body;
require(‘fs’).writeFileSync(fileName, content);
await git.add(fileName);
await git.commit(message);
await git.push(‘origin’, ‘main’);
res.send(‘âś… Code pushed successfully!’);
} catch (e) {
res.status(500).send(‘❌ Push failed: ‘ + e.message);
}
});
app.listen(port, () => {
console.log(\`đź§ RAYSUITE agent ready at http://localhost:\${port}\`); });
EOF
# STEP 6: Start the agent and open ngrok tunnel
node bridge.js &
npx ngrok http 3000
