39 lines
		
	
	
		
			950 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			950 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| [ -f functions.sh ] && source functions.sh
 | |
| 
 | |
| user=$1
 | |
| shift
 | |
| shift
 | |
| 
 | |
| newNick="$1"
 | |
| 
 | |
| # Validate that user is authorized
 | |
| if [[ ! "$user" =~ $allowList ]]; then
 | |
|     exit 0
 | |
| fi
 | |
| 
 | |
| # Validate IRC nickname format (RFC 2812)
 | |
| # Nicknames can contain: a-z A-Z 0-9 _ - [ ] { } \ | ^
 | |
| if [[ -z "$newNick" ]]; then
 | |
|     msg "#$channel" "$user: Please provide a nickname."
 | |
|     exit 0
 | |
| fi
 | |
| 
 | |
| if ! [[ "$newNick" =~ ^[a-zA-Z0-9_\[\]\{\}\\|\^-]+$ ]]; then
 | |
|     msg "#$channel" "$user: Invalid nickname format. Only alphanumeric and _-[]{}\\|^ allowed."
 | |
|     exit 0
 | |
| fi
 | |
| 
 | |
| if [[ ${#newNick} -gt 30 ]]; then
 | |
|     msg "#$channel" "$user: Nickname too long (max 30 characters)."
 | |
|     exit 0
 | |
| fi
 | |
| 
 | |
| # Change the nick
 | |
| ./modules/do/do.sh "$newNick" "#$channel" "does a magical gesture and turns into ${newNick}!"
 | |
| nick "$newNick"
 | |
| 
 | |
| # Safely update config file - escape forward slashes for sed
 | |
| escapedNick="${newNick//\//\\/}"
 | |
| sed -i "s/^nick=.*/nick=\"${escapedNick}\"/" bot.cfg
 |