generated from nhcarrigan/template
feat: add linting
This commit is contained in:
+6
-27
@@ -16,32 +16,11 @@ jobs:
|
|||||||
- name: Checkout Source Files
|
- name: Checkout Source Files
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Use Node.js v24
|
- name: Install yamllint
|
||||||
uses: actions/setup-node@v4
|
run: sudo apt-get install yamllint
|
||||||
with:
|
|
||||||
node-version: 24
|
|
||||||
|
|
||||||
- name: Setup pnpm
|
- name: Run Linter
|
||||||
uses: pnpm/action-setup@v2
|
run: make lint
|
||||||
with:
|
|
||||||
version: 10
|
|
||||||
|
|
||||||
- name: Ensure Dependencies are Pinned
|
- name: Run Tests
|
||||||
uses: naomi-lgbt/dependency-pin-check@main
|
run: make test
|
||||||
with:
|
|
||||||
language: javascript
|
|
||||||
dev-dependencies: true
|
|
||||||
peer-dependencies: true
|
|
||||||
optional-dependencies: true
|
|
||||||
|
|
||||||
- name: Install Dependencies
|
|
||||||
run: pnpm install
|
|
||||||
|
|
||||||
- name: Lint Source Files
|
|
||||||
run: pnpm run lint
|
|
||||||
|
|
||||||
- name: Verify Build
|
|
||||||
run: pnpm run build
|
|
||||||
|
|
||||||
- name: Run Tests
|
|
||||||
run: pnpm run test
|
|
||||||
|
|||||||
@@ -0,0 +1,69 @@
|
|||||||
|
yaml-files:
|
||||||
|
- '*.yaml'
|
||||||
|
- '*.yml'
|
||||||
|
- '.yamllint'
|
||||||
|
|
||||||
|
rules:
|
||||||
|
anchors:
|
||||||
|
forbid-undeclared-aliases: true
|
||||||
|
forbid-duplicated-anchors: true
|
||||||
|
forbid-unused-anchors: true
|
||||||
|
braces:
|
||||||
|
forbid: true
|
||||||
|
brackets:
|
||||||
|
forbid: true
|
||||||
|
colons:
|
||||||
|
max-spaces-before: 0
|
||||||
|
max-spaces-after: 1
|
||||||
|
commas:
|
||||||
|
max-spaces-before: 0
|
||||||
|
min-spaces-after: 1
|
||||||
|
max-spaces-after: 1
|
||||||
|
comments:
|
||||||
|
require-starting-space: true
|
||||||
|
ignore-shebangs: true
|
||||||
|
min-spaces-from-content: 2
|
||||||
|
comments-indentation: enable
|
||||||
|
document-end:
|
||||||
|
present: false
|
||||||
|
document-start:
|
||||||
|
present: false
|
||||||
|
empty-lines:
|
||||||
|
max: 2
|
||||||
|
max-start: 0
|
||||||
|
max-end: 0
|
||||||
|
empty-values:
|
||||||
|
forbid-in-block-mappings: true
|
||||||
|
forbid-in-flow-mappings: true
|
||||||
|
forbid-in-block-sequences: true
|
||||||
|
rules:
|
||||||
|
float-values:
|
||||||
|
forbid-inf: true
|
||||||
|
forbid-nan: true
|
||||||
|
forbid-scientific-notation: true
|
||||||
|
require-numeral-before-decimal: true
|
||||||
|
hyphens:
|
||||||
|
max-spaces-after: 1
|
||||||
|
indentation:
|
||||||
|
spaces: 2
|
||||||
|
indent-sequences: true
|
||||||
|
check-multi-line-strings: true
|
||||||
|
key-duplicates: enable
|
||||||
|
key-ordering: enable
|
||||||
|
line-length: disable
|
||||||
|
new-line-at-end-of-file: enable
|
||||||
|
new-lines:
|
||||||
|
type: unix
|
||||||
|
octal-values:
|
||||||
|
forbid-implicit-octal: true
|
||||||
|
forbid-explicit-octal: false
|
||||||
|
quoted-strings:
|
||||||
|
quote-type: double
|
||||||
|
required: true
|
||||||
|
extra-required: []
|
||||||
|
extra-allowed: []
|
||||||
|
allow-quoted-quotes: false
|
||||||
|
trailing-spaces: enable
|
||||||
|
truthy:
|
||||||
|
allowed-values: ['true', 'false']
|
||||||
|
check-keys: true
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
.PHONY: help push pull test
|
.PHONY: help push pull test lint
|
||||||
|
|
||||||
# Colors for pretty output
|
# Colors for pretty output
|
||||||
CYAN := \033[0;36m
|
CYAN := \033[0;36m
|
||||||
@@ -22,6 +22,7 @@ help: ## Show this help message
|
|||||||
@echo " $(YELLOW)$(BOLD)make push$(NC) $(CYAN)➜$(NC) Push the local match directory to the remote Espanso config"
|
@echo " $(YELLOW)$(BOLD)make push$(NC) $(CYAN)➜$(NC) Push the local match directory to the remote Espanso config"
|
||||||
@echo " $(YELLOW)$(BOLD)make pull$(NC) $(CYAN)➜$(NC) Pull the remote match directory to the local Espanso config"
|
@echo " $(YELLOW)$(BOLD)make pull$(NC) $(CYAN)➜$(NC) Pull the remote match directory to the local Espanso config"
|
||||||
@echo " $(YELLOW)$(BOLD)make test$(NC) $(CYAN)➜$(NC) Test the Espanso config for duplicate triggers and replace values"
|
@echo " $(YELLOW)$(BOLD)make test$(NC) $(CYAN)➜$(NC) Test the Espanso config for duplicate triggers and replace values"
|
||||||
|
@echo " $(YELLOW)$(BOLD)make lint$(NC) $(CYAN)➜$(NC) Lint YAML files in the match directory"
|
||||||
@echo ""
|
@echo ""
|
||||||
@echo "$(CYAN)$(BOLD)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━$(NC)"
|
@echo "$(CYAN)$(BOLD)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━$(NC)"
|
||||||
@echo ""
|
@echo ""
|
||||||
@@ -33,4 +34,7 @@ pull: ## Pull the remote match directory to the local Espanso config
|
|||||||
./pull.sh
|
./pull.sh
|
||||||
|
|
||||||
test: ## Test the Espanso config for duplicate triggers and replace values
|
test: ## Test the Espanso config for duplicate triggers and replace values
|
||||||
./test.sh
|
./test.sh
|
||||||
|
|
||||||
|
lint: ## Lint YAML files in the match directory
|
||||||
|
./lint.sh
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Color definitions
|
||||||
|
RESET='\033[0m'
|
||||||
|
BOLD='\033[1m'
|
||||||
|
RED='\033[91m'
|
||||||
|
GREEN='\033[92m'
|
||||||
|
YELLOW='\033[93m'
|
||||||
|
BLUE='\033[94m'
|
||||||
|
MAGENTA='\033[95m'
|
||||||
|
CYAN='\033[96m'
|
||||||
|
|
||||||
|
# Directory containing YAML files
|
||||||
|
MATCH_DIR="match"
|
||||||
|
|
||||||
|
# Check if directory exists
|
||||||
|
if [ ! -d "$MATCH_DIR" ]; then
|
||||||
|
echo -e "${RED}${BOLD}Error:${RESET} ${RED}Directory '$MATCH_DIR' not found!${RESET}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Find all YAML files
|
||||||
|
YAML_FILES=$(find "$MATCH_DIR" -name "*.yml" -o -name "*.yaml" | sort)
|
||||||
|
|
||||||
|
if [ -z "$YAML_FILES" ]; then
|
||||||
|
echo -e "${YELLOW}${BOLD}Warning:${RESET} ${YELLOW}No YAML files found in $MATCH_DIR directory!${RESET}"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Function to check if yamllint is available
|
||||||
|
check_yamllint() {
|
||||||
|
if command -v yamllint &> /dev/null; then
|
||||||
|
echo "yamllint"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if command -v pipx &> /dev/null && pipx list | grep -q yamllint; then
|
||||||
|
echo "pipx run yamllint"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if python3 -m yamllint --version &> /dev/null 2>&1; then
|
||||||
|
echo "python3 -m yamllint"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to use Python's yaml module for basic validation
|
||||||
|
validate_with_python() {
|
||||||
|
local file="$1"
|
||||||
|
python3 << EOF
|
||||||
|
import yaml
|
||||||
|
import sys
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open("$file", 'r') as f:
|
||||||
|
yaml.safe_load(f)
|
||||||
|
sys.exit(0)
|
||||||
|
except yaml.YAMLError as e:
|
||||||
|
print(f"$file: {e}", file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"$file: Error reading file - {e}", file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
# Try to find yamllint
|
||||||
|
YAMLLINT_CMD=$(check_yamllint)
|
||||||
|
|
||||||
|
if [ -n "$YAMLLINT_CMD" ]; then
|
||||||
|
echo -e "${CYAN}${BOLD}Using yamllint for YAML linting...${RESET}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Run yamllint on all files
|
||||||
|
ERRORS=0
|
||||||
|
for file in $YAML_FILES; do
|
||||||
|
echo -e "${BLUE}Linting:${RESET} ${BOLD}$(basename "$file")${RESET}"
|
||||||
|
if ! $YAMLLINT_CMD "$file"; then
|
||||||
|
ERRORS=$((ERRORS + 1))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $ERRORS -eq 0 ]; then
|
||||||
|
echo ""
|
||||||
|
echo -e "${GREEN}${BOLD}✓ Success:${RESET} ${GREEN}All YAML files passed linting!${RESET}"
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
echo -e "${RED}${BOLD}✗ Error:${RESET} ${RED}Found linting errors in $ERRORS file(s)${RESET}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e "${YELLOW}${BOLD}Warning:${RESET} ${YELLOW}yamllint not found. Falling back to basic YAML syntax validation...${RESET}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}${BOLD}Tip:${RESET} ${CYAN}Install yamllint for better linting:${RESET}"
|
||||||
|
echo -e " ${BLUE}•${RESET} ${MAGENTA}pipx install yamllint${RESET} (recommended - avoids system package conflicts)"
|
||||||
|
echo -e " ${BLUE}•${RESET} ${MAGENTA}pip install --user yamllint${RESET}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Fall back to Python yaml validation
|
||||||
|
ERRORS=0
|
||||||
|
for file in $YAML_FILES; do
|
||||||
|
echo -e "${BLUE}Validating:${RESET} ${BOLD}$(basename "$file")${RESET}"
|
||||||
|
if ! validate_with_python "$file" 2>&1; then
|
||||||
|
ERRORS=$((ERRORS + 1))
|
||||||
|
else
|
||||||
|
echo -e " ${GREEN}✓${RESET} Valid YAML syntax"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $ERRORS -eq 0 ]; then
|
||||||
|
echo ""
|
||||||
|
echo -e "${GREEN}${BOLD}✓ Success:${RESET} ${GREEN}All YAML files have valid syntax!${RESET}"
|
||||||
|
echo -e "${YELLOW}${BOLD}Note:${RESET} ${YELLOW}Install yamllint for style and best-practice checks${RESET}"
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
echo -e "${RED}${BOLD}✗ Error:${RESET} ${RED}Found syntax errors in $ERRORS file(s)${RESET}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
+12
-12
@@ -1,13 +1,13 @@
|
|||||||
matches:
|
matches:
|
||||||
- trigger: "d.promo"
|
- replace: "Please do not self-promote. This includes advertising your social media, projects, blogs, and anything else where you are gaining benefits from leveraging our community to drive traffic to your site."
|
||||||
replace: "Please do not self-promote. This includes advertising your social media, projects, blogs, and anything else where you are gaining benefits from leveraging our community to drive traffic to your site."
|
trigger: "d.promo"
|
||||||
- trigger: "d.modping"
|
- replace: "Please do not ping the entire moderation team for non-urgent situations."
|
||||||
replace: "Please do not ping the entire moderation team for non-urgent situations."
|
trigger: "d.modping"
|
||||||
- trigger: "d.everyone"
|
- replace: "Please do not try to mention everyone in the server. We have users all around the world, across many timezones. Trying to mention all of them to address your query is self-centred and rude."
|
||||||
replace: "Please do not try to mention everyone in the server. We have users all around the world, across many timezones. Trying to mention all of them to address your query is self-centred and rude."
|
trigger: "d.everyone"
|
||||||
- trigger: "d.dm"
|
- replace: "Hello there! Before continuing this conversation, please note that direct messages are billed at $25 per incoming message as indicated in our communication policy: https://docs.nhcarrigan.com/about/contact/#8-direct-messages. Continuing to contact us through this channel will trigger your first invoice. If you prefer a free method of communication, join our public server: https://chat.nhcarrigan.com"
|
||||||
replace: "Hello there! Before continuing this conversation, please note that direct messages are billed at $25 per incoming message as indicated in our communication policy: https://docs.nhcarrigan.com/about/contact/#8-direct-messages. Continuing to contact us through this channel will trigger your first invoice. If you prefer a free method of communication, join our public server: https://chat.nhcarrigan.com"
|
trigger: "d.dm"
|
||||||
- trigger: "d.invoice"
|
- replace: "Thank you for confirming these charges. Here is your invoice, including all previously sent messages and an additional buffer of 5 messages:"
|
||||||
replace: "Thank you for confirming these charges. Here is your invoice, including all previously sent messages and an additional buffer of 5 messages:"
|
trigger: "d.invoice"
|
||||||
- trigger: "d.block"
|
- replace: "Valued consumer, we appreciate your business. However, due to outstanding invoice charges for our DM services, your access has been suspended until payment is made in full. You may still reach us via our chat server: https://chat.nhcarrigan.com"
|
||||||
replace: "Valued consumer, we appreciate your business. However, due to outstanding invoice charges for our DM services, your access has been suspended until payment is made in full. You may still reach us via our chat server: https://chat.nhcarrigan.com"
|
trigger: "d.block"
|
||||||
|
|||||||
+10
-10
@@ -1,11 +1,11 @@
|
|||||||
matches:
|
matches:
|
||||||
- trigger: "docs.contribute"
|
- replace: "https://docs.nhcarrigan.com/dev/contributing/"
|
||||||
replace: "https://docs.nhcarrigan.com/dev/contributing/"
|
trigger: "docs.contribute"
|
||||||
- trigger: "docs.coc"
|
- replace: "https://docs.nhcarrigan.com/community/coc/"
|
||||||
replace: "https://docs.nhcarrigan.com/community/coc/"
|
trigger: "docs.coc"
|
||||||
- trigger: "docs.terms"
|
- replace: "https://docs.nhcarrigan.com/legal/terms/"
|
||||||
replace: "https://docs.nhcarrigan.com/legal/terms/"
|
trigger: "docs.terms"
|
||||||
- trigger: "docs.privacy"
|
- replace: "https://docs.nhcarrigan.com/legal/privacy/"
|
||||||
replace: "https://docs.nhcarrigan.com/legal/privacy/"
|
trigger: "docs.privacy"
|
||||||
- trigger: "docs.community"
|
- replace: "https://docs.nhcarrigan.com/community/guide/"
|
||||||
replace: "https://docs.nhcarrigan.com/community/guide/"
|
trigger: "docs.community"
|
||||||
|
|||||||
+104
-104
@@ -1,105 +1,105 @@
|
|||||||
matches:
|
matches:
|
||||||
- trigger: "gif.waltz"
|
- replace: "https://c.tenor.com/kO5ruOuFkiYAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/kO5ruOuFkiYAAAAC/tenor.gif"
|
trigger: "gif.waltz"
|
||||||
- trigger: "gif.kiss"
|
- replace: "https://c.tenor.com/hdFfH-A8UwoAAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/hdFfH-A8UwoAAAAd/tenor.gif"
|
trigger: "gif.kiss"
|
||||||
- trigger: "gif.jinx"
|
- replace: "https://c.tenor.com/rgPmLy-LrrgAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/rgPmLy-LrrgAAAAC/tenor.gif"
|
trigger: "gif.jinx"
|
||||||
- trigger: "gif.fabulous"
|
- replace: "https://c.tenor.com/jKIq-XwBErgAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/jKIq-XwBErgAAAAC/tenor.gif"
|
trigger: "gif.fabulous"
|
||||||
- trigger: "gif.wake"
|
- replace: "https://c.tenor.com/feKcxglGTmEAAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/feKcxglGTmEAAAAd/tenor.gif"
|
trigger: "gif.wake"
|
||||||
- trigger: "gif.fix"
|
- replace: "https://c.tenor.com/rbmuthchA8cAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/rbmuthchA8cAAAAC/tenor.gif"
|
trigger: "gif.fix"
|
||||||
- trigger: "gif.comfort"
|
- replace: "https://c.tenor.com/Hgt-mT0KXN0AAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/Hgt-mT0KXN0AAAAd/tenor.gif"
|
trigger: "gif.comfort"
|
||||||
- trigger: "gif.error"
|
- replace: "https://c.tenor.com/9p1NW-ml_rYAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/9p1NW-ml_rYAAAAC/tenor.gif"
|
trigger: "gif.error"
|
||||||
- trigger: "gif.tired"
|
- replace: "https://c.tenor.com/EAKYKQFu4BAAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/EAKYKQFu4BAAAAAC/tenor.gif"
|
trigger: "gif.tired"
|
||||||
- trigger: "gif.bored"
|
- replace: "https://c.tenor.com/GX7e2p31RlQAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/GX7e2p31RlQAAAAC/tenor.gif"
|
trigger: "gif.bored"
|
||||||
- trigger: "gif.praise"
|
- replace: "https://c.tenor.com/4-yCmKYkVgoAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/4-yCmKYkVgoAAAAC/tenor.gif"
|
trigger: "gif.praise"
|
||||||
- trigger: "gif.wait"
|
- replace: "https://c.tenor.com/gEpKdawu7moAAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/gEpKdawu7moAAAAd/tenor.gif"
|
trigger: "gif.wait"
|
||||||
- trigger: "gif.reverse"
|
- replace: "https://c.tenor.com/0d_aB3xxWroAAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/0d_aB3xxWroAAAAd/tenor.gif"
|
trigger: "gif.reverse"
|
||||||
- trigger: "gif.annoyed"
|
- replace: "https://c.tenor.com/MvKZZ7JCkUMAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/MvKZZ7JCkUMAAAAC/tenor.gif"
|
trigger: "gif.annoyed"
|
||||||
- trigger: "gif.sword"
|
- replace: "https://c.tenor.com/EWhFGCTfmucAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/EWhFGCTfmucAAAAC/tenor.gif"
|
trigger: "gif.sword"
|
||||||
- trigger: "gif.blush"
|
- replace: "https://c.tenor.com/CEkiOjpsylwAAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/CEkiOjpsylwAAAAd/tenor.gif"
|
trigger: "gif.blush"
|
||||||
- trigger: "gif.smart"
|
- replace: "https://c.tenor.com/hPsNhgYicFMAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/hPsNhgYicFMAAAAC/tenor.gif"
|
trigger: "gif.smart"
|
||||||
- trigger: "gif.ignore"
|
- replace: "https://c.tenor.com/AlUkiGkR2j8AAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/AlUkiGkR2j8AAAAC/tenor.gif"
|
trigger: "gif.ignore"
|
||||||
- trigger: "gif.shh"
|
- replace: "https://c.tenor.com/P32p3dPsEgkAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/P32p3dPsEgkAAAAC/tenor.gif"
|
trigger: "gif.shh"
|
||||||
- trigger: "gif.giggle"
|
- replace: "https://c.tenor.com/3_Yh8BaRLAIAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/3_Yh8BaRLAIAAAAC/tenor.gif"
|
trigger: "gif.giggle"
|
||||||
- trigger: "gif.wave"
|
- replace: "https://c.tenor.com/FvthnLepGgAAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/FvthnLepGgAAAAAC/tenor.gif"
|
trigger: "gif.wave"
|
||||||
- trigger: "gif.salute"
|
- replace: "https://c.tenor.com/NahzVADyncsAAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/NahzVADyncsAAAAd/tenor.gif"
|
trigger: "gif.salute"
|
||||||
- trigger: "gif.thank"
|
- replace: "https://c.tenor.com/oEFpzFipXvcAAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/oEFpzFipXvcAAAAd/tenor.gif"
|
trigger: "gif.thank"
|
||||||
- trigger: "gif.peek"
|
- replace: "https://c.tenor.com/X7tqC1BVu4sAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/X7tqC1BVu4sAAAAC/tenor.gif"
|
trigger: "gif.peek"
|
||||||
- trigger: "gif.pout"
|
- replace: "https://c.tenor.com/03VCLMyKfL4AAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/03VCLMyKfL4AAAAC/tenor.gif"
|
trigger: "gif.pout"
|
||||||
- trigger: "gif.sing"
|
- replace: "https://c.tenor.com/D4Z50s-YFkoAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/D4Z50s-YFkoAAAAC/tenor.gif"
|
trigger: "gif.sing"
|
||||||
- trigger: "gif.objection"
|
- replace: "https://c.tenor.com/kHS2x_pJVrwAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/kHS2x_pJVrwAAAAC/tenor.gif"
|
trigger: "gif.objection"
|
||||||
- trigger: "gif.dance"
|
- replace: "https://c.tenor.com/g9xOFVXmNx0AAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/g9xOFVXmNx0AAAAd/tenor.gif"
|
trigger: "gif.dance"
|
||||||
- trigger: "gif.dancy"
|
- replace: "https://c.tenor.com/m21RwoBHceEAAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/m21RwoBHceEAAAAd/tenor.gif"
|
trigger: "gif.dancy"
|
||||||
- trigger: "gif.cheer"
|
- replace: "https://c.tenor.com/fKjC8KynhWYAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/fKjC8KynhWYAAAAC/tenor.gif"
|
trigger: "gif.cheer"
|
||||||
- trigger: "gif.hype"
|
- replace: "https://c.tenor.com/_eWYkZnqjwcAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/_eWYkZnqjwcAAAAC/tenor.gif"
|
trigger: "gif.hype"
|
||||||
- trigger: "gif.noted"
|
- replace: "https://c.tenor.com/tHswBoYy_HIAAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/tHswBoYy_HIAAAAd/tenor.gif"
|
trigger: "gif.noted"
|
||||||
- trigger: "gif.smug"
|
- replace: "https://c.tenor.com/amMMuaTS1bsAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/amMMuaTS1bsAAAAC/tenor.gif"
|
trigger: "gif.smug"
|
||||||
- trigger: "gif.vibe"
|
- replace: "https://c.tenor.com/_aiabJq9CdoAAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/_aiabJq9CdoAAAAd/tenor.gif"
|
trigger: "gif.vibe"
|
||||||
- trigger: "gif.laugh"
|
- replace: "https://c.tenor.com/jz9aJI4fys4AAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/jz9aJI4fys4AAAAC/tenor.gif"
|
trigger: "gif.laugh"
|
||||||
- trigger: "gif.shrug"
|
- replace: "https://c.tenor.com/0GOwPHgcUj0AAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/0GOwPHgcUj0AAAAC/tenor.gif"
|
trigger: "gif.shrug"
|
||||||
- trigger: "gif.block"
|
- replace: "https://c.tenor.com/Fym_4yzyu0IAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/Fym_4yzyu0IAAAAC/tenor.gif"
|
trigger: "gif.block"
|
||||||
- trigger: "gif.pray"
|
- replace: "https://c.tenor.com/d8vq5hthkAoAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/d8vq5hthkAoAAAAC/tenor.gif"
|
trigger: "gif.pray"
|
||||||
- trigger: "gif.psychic"
|
- replace: "https://c.tenor.com/ETmw31CyCmQAAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/ETmw31CyCmQAAAAd/tenor.gif"
|
trigger: "gif.psychic"
|
||||||
- trigger: "gif.wiggle"
|
- replace: "https://c.tenor.com/6bGvizlex6oAAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/6bGvizlex6oAAAAd/tenor.gif"
|
trigger: "gif.wiggle"
|
||||||
- trigger: "gif.lurk"
|
- replace: "https://c.tenor.com/Bh5FPIsK2xEAAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/Bh5FPIsK2xEAAAAd/tenor.gif"
|
trigger: "gif.lurk"
|
||||||
- trigger: "gif.stare"
|
- replace: "https://c.tenor.com/VC3EDnfJmKEAAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/VC3EDnfJmKEAAAAd/tenor.gif"
|
trigger: "gif.stare"
|
||||||
- trigger: "gif.bow"
|
- replace: "https://c.tenor.com/lpxKv7slwfgAAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/lpxKv7slwfgAAAAd/tenor.gif"
|
trigger: "gif.bow"
|
||||||
- trigger: "gif.excited"
|
- replace: "https://c.tenor.com/CtJ_SVFoh4cAAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/CtJ_SVFoh4cAAAAd/tenor.gif"
|
trigger: "gif.excited"
|
||||||
- trigger: "gif.think"
|
- replace: "https://c.tenor.com/keB3oG-he3AAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/keB3oG-he3AAAAAC/tenor.gif"
|
trigger: "gif.think"
|
||||||
- trigger: "gif.paper"
|
- replace: "https://c.tenor.com/ai682TGdyQAAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/ai682TGdyQAAAAAC/tenor.gif"
|
trigger: "gif.paper"
|
||||||
- trigger: "gif.thonk"
|
- replace: "https://c.tenor.com/4o4SzmfxiBAAAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/4o4SzmfxiBAAAAAd/tenor.gif"
|
trigger: "gif.thonk"
|
||||||
- trigger: "gif.money"
|
- replace: "https://c.tenor.com/uPAvHo2xmN8AAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/uPAvHo2xmN8AAAAC/tenor.gif"
|
trigger: "gif.money"
|
||||||
- trigger: "gif.nod"
|
- replace: "https://c.tenor.com/fNkIorwhEacAAAAC/tenor.gif"
|
||||||
replace: "https://c.tenor.com/fNkIorwhEacAAAAC/tenor.gif"
|
trigger: "gif.nod"
|
||||||
- trigger: "gif.oops"
|
- replace: "https://c.tenor.com/VWi9_CJrUc8AAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/VWi9_CJrUc8AAAAd/tenor.gif"
|
trigger: "gif.oops"
|
||||||
- trigger: "gif.lewd"
|
- replace: "https://c.tenor.com/aRhrMeBzkd0AAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/aRhrMeBzkd0AAAAd/tenor.gif"
|
trigger: "gif.lewd"
|
||||||
- trigger: "gif.exhausted"
|
- replace: "https://c.tenor.com/lwyR-BEUeD4AAAAd/tenor.gif"
|
||||||
replace: "https://c.tenor.com/lwyR-BEUeD4AAAAd/tenor.gif"
|
trigger: "gif.exhausted"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
matches:
|
matches:
|
||||||
- trigger: "hf.ps"
|
- replace: "Please keep all projects to <#1280522731963547759>."
|
||||||
replace: "Please keep all projects to <#1280522731963547759>."
|
trigger: "hf.ps"
|
||||||
- trigger: "hf.invalid"
|
- replace: "That project has been reported by the community for violating Hacktoberfest's values. Repositories which are designed to facilitate easy pull requests for the sake of 'winning' Hacktoberfest, including arbitrary collections of content like algorithms and code snippets, are ineligible to participate."
|
||||||
replace: "That project has been reported by the community for violating Hacktoberfest's values. Repositories which are designed to facilitate easy pull requests for the sake of 'winning' Hacktoberfest, including arbitrary collections of content like algorithms and code snippets, are ineligible to participate."
|
trigger: "hf.invalid"
|
||||||
- trigger: "hf.spam"
|
- replace: "Maintainers are free to use the `spam` label to indicate that a pull request is low effort and does not follow their contributing guide. If you receive two or more `spam` labels across any of your pull requests, you will be permanently ineligible to participate in Hacktoberfest."
|
||||||
replace: "Maintainers are free to use the `spam` label to indicate that a pull request is low effort and does not follow their contributing guide. If you receive two or more `spam` labels across any of your pull requests, you will be permanently ineligible to participate in Hacktoberfest."
|
trigger: "hf.spam"
|
||||||
|
|||||||
+30
-30
@@ -1,31 +1,31 @@
|
|||||||
matches:
|
matches:
|
||||||
- trigger: "img.bad"
|
- replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-13-52-26-Render.png"
|
||||||
replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-13-52-26-Render.png"
|
trigger: "img.bad"
|
||||||
- trigger: "img.magic"
|
- replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-14-20-40-Render.png"
|
||||||
replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-14-20-40-Render.png"
|
trigger: "img.magic"
|
||||||
- trigger: "img.dance"
|
- replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-14-24-02-Render.png"
|
||||||
replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-14-24-02-Render.png"
|
trigger: "img.dance"
|
||||||
- trigger: "img.smart"
|
- replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-14-34-17-Render.png"
|
||||||
replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-14-34-17-Render.png"
|
trigger: "img.smart"
|
||||||
- trigger: "img.nom"
|
- replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-14-35-27-Render.png"
|
||||||
replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-14-35-27-Render.png"
|
trigger: "img.nom"
|
||||||
- trigger: "img.fight"
|
- replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-16-29-08-Render.png"
|
||||||
replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-16-29-08-Render.png"
|
trigger: "img.fight"
|
||||||
- trigger: "img.shh"
|
- replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-16-45-58-Render.png"
|
||||||
replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-16-45-58-Render.png"
|
trigger: "img.shh"
|
||||||
- trigger: "img.hug"
|
- replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-15-36-09-Render.png"
|
||||||
replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-15-36-09-Render.png"
|
trigger: "img.hug"
|
||||||
- trigger: "img.point"
|
- replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-16-56-41-Render.png"
|
||||||
replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-16-56-41-Render.png"
|
trigger: "img.point"
|
||||||
- trigger: "img.work"
|
- replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-17-02-27-Render.png"
|
||||||
replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-17-02-27-Render.png"
|
trigger: "img.work"
|
||||||
- trigger: "img.innocent"
|
- replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-16-15-56-Render.png"
|
||||||
replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-16-15-56-Render.png"
|
trigger: "img.innocent"
|
||||||
- trigger: "img.read"
|
- replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-14-55-30-Render.png"
|
||||||
replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-14-55-30-Render.png"
|
trigger: "img.read"
|
||||||
- trigger: "img.peek"
|
- replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-14-23-32-Render.png"
|
||||||
replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-14-23-32-Render.png"
|
trigger: "img.peek"
|
||||||
- trigger: "img.queen"
|
- replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-15-18-49-Render.png"
|
||||||
replace: "https://cdn.nhcarrigan.com/koikatsu/CharaStudio-2025-04-06-15-18-49-Render.png"
|
trigger: "img.queen"
|
||||||
- trigger: "img.stonks"
|
- replace: "https://cdn.nhcarrigan.com/stonks.png"
|
||||||
replace: "https://cdn.nhcarrigan.com/stonks.png"
|
trigger: "img.stonks"
|
||||||
|
|||||||
Reference in New Issue
Block a user