diff --git a/bot.py b/bot.py index 47ffa76..09708d0 100644 --- a/bot.py +++ b/bot.py @@ -51,101 +51,6 @@ logger = logging.getLogger() for handler in logger.handlers: handler.setFormatter(formatter) -TAILSCALE_IP1 = "100.118.134.32" -TAILSCALE_IP2 = "100.95.192.63" -LOCK_PORT = 30000 -TIMEOUT = 5.0 -CHECK_INTERVAL = 10 - -class LeaderElection: - def __init__(self): - self.is_leader = False - self.leader_socket = None - self.lock = threading.Lock() - self.keep_running = True - - def start_leader_server(self): - """Run the leader socket in background""" - while self.keep_running and self.is_leader: - try: - # This will block for TIMEOUT seconds max - conn, addr = self.leader_socket.accept() - conn.close() # Immediately close connection - except socket.timeout: - continue # Just keep waiting - except: - break # Exit on other errors - - def attempt_leadership(self): - with self.lock: - if self.is_leader: - return True - - try: - # Check if leader exists - if self.check_leader_active(): - return False - - # Try to become leader - self.leader_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.leader_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - self.leader_socket.bind(('0.0.0.0', LOCK_PORT)) - self.leader_socket.listen(1) - self.leader_socket.settimeout(TIMEOUT) - self.is_leader = True - - # Start socket server in background thread - threading.Thread(target=self.start_leader_server, daemon=True).start() - #print("Became leader - Starting bot") - logging.info("Became leader - Starting bot") - return True - - except OSError as e: - #print(f"Leadership attempt failed: {e}") - logging.critical(f"Leadership attempt failed: {e}") - self.cleanup() - return False - - def check_leader_active(self): - """Check if leader is active""" - try: - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - s.settimeout(TIMEOUT) - s.connect((TAILSCALE_IP2, LOCK_PORT)) - return True - except (ConnectionRefusedError, socket.timeout, OSError): - return False - - def cleanup(self): - if self.leader_socket: - self.leader_socket.close() - self.is_leader = False - -def health_check(leader_election): - """Periodically check leader status""" - while True: - time.sleep(CHECK_INTERVAL) - - if leader_election.is_leader: - # Verify we're still leader - try: - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - s.settimeout(TIMEOUT) - s.connect((TAILSCALE_IP1, LOCK_PORT)) - except: - # Lost leadership - #print("Lost leadership") - logging.error("Lost leadership") - leader_election.cleanup() - else: - # Check if leader is gone - if not leader_election.check_leader_active(): - #print("Attempting to become leader...") - logging.warning("Attempting to become leader...") - if leader_election.attempt_leadership(): - # Start the bot now that we're leader - start_bot() - class Bot(commands.Bot): def __init__(self, intents: discord.Intents, **kwargs): super().__init__(command_prefix="/", intents=intents, case_insensitive=True) @@ -164,326 +69,336 @@ status = os.getenv("status") url_status = "Unknown" url = "https://oss-auth.thecheese.io/" -error_codes = """ -201005: Invalid public key type in certificate -201009: Read failure (short read) -201010: Write failure (short write) -201012: Invalid signature type (for signed blobs) -201016: Maximum amount of handles exceeded (3 handles, as there are only 3 contexts) -201017: Invalid arguments -201020: Device ID mismatch. Returned by ES_ImportTicket if the ticket is personalised and the device ID from the ticket mismatches with the actual ID. -201022: Imported content hash does not match with the hash from the TMD. Returned by ES_ImportContentEnd and ES_ImportBoot. -201024: Memory allocation failure -201026: Incorrect access rights (according to the TMD) -201027: Issuer not found in the certificate chain -201028: Ticket not found -201029: Invalid ticket. This is returned if the common key field contains an invalid value (anything other than 0 or 1). This is also returned from ES_LaunchTitle if the title ID contained in the ticket does not match the TMD title ID. -201031: During LaunchTitle/ImportTitle: installed boot2 version is too old. During ImportBoot: downgrades are not allowed. -201032: Fatal error early in ES initialisation. Can also be returned in ES_CheckHasKoreanKey in all other cases (key is not the Korean Key or a zero key!) -201033: A ticket limit was exceeded (duration or launch count) -201034: Returned by ES_CheckHasKoreanKey if the key is sensed to be all zeroes -201035: A title with a higher version is already installed -201036: Required sysversion(IOS) is not installed (only for the system menu [check]) -201037: Installed number of contents doesn't match TMD (only for the system menu [check]) -201039: Returned by DI as an ES error code when TMD not supplied for disc/nand game -202000: Permission denied (returned when accessing an object for which the caller has no permission) -202001: IOSC_EEXIST -202003: IOSC_EMAX -202004: IOSC_ENOENT -202005: IOSC_INVALID_OBJTYPE -202006: IOSC_INVALID_RNG -202007: IOSC_INVALID_FLAG -202008: IOSC_INVALID_FORMAT -202009: IOSC_INVALID_VERSION -202010: IOSC_INVALID_SIGNER -202011: IOSC_FAIL_CHECKVALUE -202012: Internal failure -202013: Memory allocation failure. Known to be returned when the keyring is full (contains 0x20 keys) -202014: Invalid size -202015: Invalid address -202016: Unaligned data -204001: EC_ERROR_FAIL: Generic error -204002: EC_ERROR_NOT_SUPPORTED: Feature not implemented -204003: EC_ERROR_INSUFFICIENT_RESOURCE -204004: EC_ERROR_INVALID -204005: EC_ERROR_NOMEM -204006: EC_ERROR_NOT_FOUND -204007: EC_ERROR_NOT_BUSY: no active async operation -204008: EC_ERROR_BUSY -204009: EC_ERROR_NOT_DONE -204013: EC_ERROR_NET_NA: Internet access not available -204015: EC_ERROR_WS_REPORT: Server reports a problem -204017: EC_ERROR_ECARD: Invalid eCard -204018: EC_ERROR_OVERFLOW: Output too big for buf provided -204019: EC_ERROR_NET_CONTENT: Error getting content from server -204020: EC_ERROR_CONTENT_SIZE: Downloaded content size doesn't match tmd -204034: EC_ERROR_WS_RESP: invalid web service response -204035: EC_ERROR_TICKET: problem importing ticket -204036: EC_ERROR_TITLE: problem importing title -204037: EC_ERROR_TITLE_CONTENT: problem importing title content -204038: EC_ERROR_CANCELED: an extended operation was canceled -204039: EC_ERROR_ALREADY: one time only action was previously done -204041: EC_ERROR_INIT: library has not been initialized -204042: EC_ERROR_REGISTER: device is not registered -204043: EC_ERROR_WS_RECV: recv error on web service response -204044: EC_ERROR_NOT_ACTIVE: expected operation is not active op -204045: EC_ERROR_FILE_READ -204046: EC_ERROR_FILE_WRITE -204050: EC_ERROR_NOT_OWNED: Title is not owned -204052: EC_ERROR_HTTP_HDR_PARSE: Could not parse http header -204053: EC_ERROR_CONFIG: Invalid configuration (e.g. url is invalid) -204054: EC_ERROR_CANCEL_FAILED: Could not cancel asynchronous operaton -204055: EC_ERROR_USER_INODES: Operation would exceed max user inodes -204056: EC_ERROR_USER_BLOCKS: Operation would exceed max user blocks -204057: EC_ERROR_SYS_INODES: Operation would exceed max sys inodes -204058: EC_ERROR_SYS_BLOCKS: Operation would exceed max sys blocks -204065: EC_ERROR_NO_DEVICE_CODE: Operation requires device code -204066: EC_ERROR_SYNC: Operation requres ticket sync -204069: EC_ERROR_CONNECT: Operation requires EC_Connect() -204070: EC_ERROR_NO_TMD: Title TMD is not on device -204071: EC_ERROR_FIRMWARE: Title requires updated firmware -204074: EC_ERROR_INVALID_PCPW: Parental control password doesn't match -204075: EC_ERROR_PC_DISABLED: Parental control is not enabled -204076: EC_ERROR_EULA: Customer has not agreed to EULA -204077: EC_ERROR_AGE_RESTRICTED: Operation requires parental control password -204078: EC_ERROR_POINTS_RESTRICTED: Operation requires parental control password -204079: EC_ERROR_ALREADY_OWN: Attempt purchase already owned item -204080: EC_ERROR_SHOP_SETUP: Shop channel setup not done or cleared -204081: EC_ERROR_INSUFFICIENT_FUNDS: Not enough funds to purchase the item -204501: HTTP 201 Created -204502: HTTP 202 Accepted -204503: HTTP 203 Non-Authoritative Information -204504: HTTP 204 No Content -204505: HTTP 205 Reset Content -204506: HTTP 206 Partial Content -204600: HTTP 300 Multiple Choices -204601: HTTP 301 Moved Permanently -204602: HTTP 302 Found -204603: HTTP 303 See Other -204604: HTTP 304 Not Modified -204607: HTTP 307 Temporary Redirect -204608: HTTP 308 Permanent Redirect -204700: HTTP 400 Bad Request -204701: HTTP 401 Unauthorized -204702: HTTP 402 Payment Required -204703: HTTP 403 Forbidden -204704: HTTP 404 Not Found -204705: HTTP 405 Method Not Allowed -204706: HTTP 406 Not Acceptable -204707: HTTP 407 Proxy Authentication Required -204708: HTTP 408 Request Timeout -204709: HTTP 409 Conflict -204710: HTTP 410 Gone -204711: HTTP 411 Length Required -204712: HTTP 412 Precondition Failed -204713: HTTP 413 Request Too Large -204714: HTTP 414 Request-URI Too Long -204715: HTTP 415 Unsupported Media Type -204716: HTTP 416 Range Not Satisfiable -204717: HTTP 417 Expectation Failed -204800: HTTP 500 Internal Server Error -204801: HTTP 501 Not Implemented -204802: HTTP 502 Bad Gateway -204803: HTTP 503 Service Unavailable -204804: HTTP 504 Gateway Timeout -204805: HTTP 505 HTTP Version Not Supported -204811: HTTP 511 Network Authentication Required -204901: NHTTP_ERROR_ALLOC -204902: NHTTP_ERROR_TOOMANYREQ -204903: NHTTP_ERROR_SOCKET -204904: NHTTP_ERROR_DNS -204905: NHTTP_ERROR_CONNECT -204906: NHTTP_ERROR_BUFFULL -204907: NHTTP_ERROR_HTTPPARSE -204908: NHTTP_ERROR_CANCELED -204909: NHTTP_ERROR_REVOLUTIONSDK -204910: NHTTP_ERROR_REVOLUTIONWIFI -204911: NHTTP_ERROR_UNKNOWN -204912: NHTTP_ERROR_DNS_PROXY -204913: NHTTP_ERROR_CONNECT_PROXY -204914: NHTTP_ERROR_SSL -204961: SSL_EFAILED -204962: SSL_EWANT_READ -204963: SSL_EWANT_WRITE -204964: SSL_ESYSCALL -204965: SSL_EZERO_RETURN -204966: SSL_EWANT_CONNECT -204967: SSL_ESSLID -204968: SSL_EVERIFY_COMMON_NAME -204969: SSL_EVERIFY_ROOT_CA -204970: SSL_EVERIFY_CHAIN -204971: SSL_EVERIFY_DATE -204972: SSL_EGET_SERVER_CERT -204992: EC_ERROR_NHTTP_CRX -204993: EC_ERROR_NHTTP_AHF -204994: EC_ERROR_NHTTP_SCCD -204995: EC_ERROR_NHTTP_SRCD -204996: EC_ERROR_NHTTP_SVO -204997: EC_ERROR_NHTTP_PDE -204998: EC_ERROR_NHTTP_PDR -204999: EC_ERROR_NHTTP_SRA -20955X: 2-7 Timeout occurred between client and server -204704: Equivalent to a HTTP 404 error -2056XX: ECS Error -205625: ECS Gift error -2059XX-2064XX: IAS Error -205968: "Bad device code" (?) -205627: Cannot buy DLC for a title you don't own -2057XX-20570X: ETS Error -2058XX-205825: PAS Error -2066XX: OSS Error -209531: Page was not found -209622: SSL CA unknown / not included in channel -220003: The requested URL was filtered by Opera's filter -204927: IAS Unknown issuer of device cert -204901-204973: Try another credit card or contact your credit card provider -205540: This software doesn't work in the vWii -205617: Wii Points card code invalid -205618: Wii Points card is for another country -205621: Unknown error (possibly ECS gift error?) -205623: Trial period for that title expired, you can't download that again -205626: Unable to send present (ECS gift error) -205642: Unknown error -205643: Unknown error -205644: Credit cards can't be used on this console. -205645: Issue with your DSi shop account? -205646: Unable to send present (ECS gift error) -205672: Wii Shop account mismatch -20580X: Wii Points Card error -205810: You don't have enough Wii Points / Error while redeeming your download ticket -205811: Wii Points card expired -205812-205814: The Wii Points card can not be used -205815: Wii Points Card was already used -205816: Some error with the Wii Points Card -205818: This card number can only be used for a specific title, it is not a Wii Points Card. -205819: Wii Points Card code is invalid -205830: Wii Points Card code is invalid -205831: Wii Points Card is for another Country -205901: Wii number invalid! -205903: Unknown error -205906: Problem with your online account -205921-205925: Wii NAND corrupted -205928: Unknown error -205940-250941: Problems with your "Club-Nintendo"-account. It can't get connected with your shop account -250943: Problems with your "Club-Nintendo"-account. It can't get connected with your shop account -209600-209601: Connection timeout -205942: Maintenance. Login not possible -205958: Unknown error -205968: IAS_BAD_DEVICE_CODE -206112: The free title promotion has ended (ICR_END) -206401: Invalid characters in nick or password -206499: Maintenance. Login not possible -206601: OSS_ERROR_INVALID_PARAM. Triggered by B_24 in Wii Shop (Invalid parameter) -206602: Error while entering Wii Points Card code. Try again later. -206603: Unable to confirm credit card information -206607: Error while retrieving the served content -206608: Error redeeming Wii Download Ticket -206610: Wii download ticket expired -206611: Wii download ticket invalid -206612: This Wii download ticket can't be used in your country -206613: No software available for this download ticket. May be caused by parental controls. -206650: Wrong PIN (parental controls) -206651: Mistake while entering the wii serial number -206652: Wrong PIN three times (parental controls) -206653: Nickname or password wrong -206660: No progress was made in the last operation -206661: Credit card type invalid -206662: Credit card number invalid -206663: An operation is in progress -206664: No security code was provided -206667: Wii download ticket invalid -206668: Happens when current points count + new points would exceed the wii points limit -206669: Wii Points card invalid -206670: Problem with your Wii Shop Account (invalid Wii number) -206671: Problem with your Wii Shop Account (invalid shop app - bad title ID) -206672: Problem with your Wii Shop Account (invalid shop app - no title info) -206673: Problem with your Wii Shop Account (invalid registration status) -206674: Problem with your Wii Shop Account (unexpected eclib error) -206699: Try again later -208000: You have entered the wrong state ("Bundesland") -208001: Unable to process for credit cards (some kind of blacklist?) -208002: Billing address invalid -208003: Credit card number doesn't match card type -208004: three-digit security code invalid -208005: Mistake in credit card data. -208006: Card number invalid -208007: Expiration date invalid -208008: Postal code invalid -208009: Technical difficulties. -208010: Credit card could not get validated. Try again later. -208011: Credit card declined -208012: Credit card declined - no funds available -208013: Credit card declined - inactive -208014: Credit card expired -208015: Credit card code invalid -208016: Credit card number invalid -208017: Credit card limit reached -208018: Credit card invalid -208019: Postal / zip code invalid -208021: Refund is in progress -208022: Refund was already processed -208023: Refund error -208025: Empty security code -209XXX: Server connection timeout -209531: Web page not found (WS_ERROR_WWW_HTTP_ERR_NOT_FOUND) -209552: Timeout between client and server -209557: Timeout Occurred between client and server -209593: Access denied by Opera Wii Shop domain filter config -209620: Some JS files couldn't be loaded (CheckRegistered.jsp line ~100) -209622: SSL CA unknown / not included in channel -209631: Invalid SD Card -209632: The SD Card is inserted(?) -209633: The SD Card is not inserted -209634: Unknown SD Card cluster (not 32k) -209635: Incorrect SD Card alignment -209636: Incorrect SD Card Device -209637: The title's ticket is not present on the SD -209638: SDCARD_ERROR_ACCESS -209639: SDCARD_ERROR_CANCELLED (cancelBackupToSDCard successful?) -209640: SDCARD_ERROR_CONTENT_INVALID (Banner is not found) -209641: SDCARD_ERROR_MAXFD (?) -209642: The SD Card is "out of memory" -209643: The SD Card is corrupted (NAND_CORRUPT ERROR (Serious error)) -209644: SDCARD_ERROR_ECC_CRIT (?) -209645: SD Authentication error(?) -209646: Fatal error with the SD Card -209647: Unknown SD Card -209648: The SD Card is not inserted -209649: The SD Card is not supported -209650: SD Card File system is broken -209651: SD is write protected -209652: No space left in the SD -209653: Other SD error -209654: Unknown SD Error -209655: SDCARD_ERROR_WANT_OF_CAPACITY (SD full) -209656: SDCARD_ERROR_EXIST_CHECK_SOFT (title already present on SD) -209657: SDCARD_ERROR_EXCEPTION_STATE (Illegal statement and cancelBackupToSDCard error) -209658-209660: Unused -209661: EXIST_CHECK_SOFT_NAND -209662: errChannel -209663: errInodes -209664: SD Backup timeout in B-10 -209665: JournalFlag error in B-10 -209666: Available space error in B-09 on checking remain size -209667: Available space is not sufficient (NAND) -209800 - 209801: Connection timeout (also caused by missing shop.connecting) -220000: Connection failed -220001: Unknown protocol -220002: Out of memory -220101: Allocation error -220102: Unsupported file -220103: Empty file -220104: Invalid file -220105: Javascript error -220106: Plugin error -220201: Not found -220202: Connection refused -220301-220302: HTTP error code 100 - 101 -220303-220309: HTTP error code 200 - 206 -220310-220315: HTTP error code 300 - 305 -220316-220331: HTTP error code 400 - 415 -220332-220337: HTTP error code 500 - 505 -""" +error_codes = { + "201005": "Invalid public key type in certificate", + "201009": "Read failure (short read)", + "201010": "Write failure (short write)", + "201012": "Invalid signature type (for signed blobs)", + "201016": "Maximum amount of handles exceeded (3 handles, as there are only 3 contexts)", + "201017": "Invalid arguments", + "201020": "Device ID mismatch. Returned by ES_ImportTicket if the ticket is personalised and the device ID from the ticket mismatches with the actual ID.", + "201022": "Imported content hash does not match with the hash from the TMD. Returned by ES_ImportContentEnd and ES_ImportBoot.", + "201024": "Memory allocation failure", + "201026": "Incorrect access rights (according to the TMD)", + "201027": "Issuer not found in the certificate chain", + "201028": "Ticket not found", + "201029": "Invalid ticket. This is returned if the common key field contains an invalid value (anything other than 0 or 1). This is also returned from ES_LaunchTitle if the title ID contained in the ticket does not match the TMD title ID.", + "201031": "During LaunchTitle/ImportTitle: installed boot2 version is too old. During ImportBoot: downgrades are not allowed.", + "201032": "Fatal error early in ES initialisation. Can also be returned in ES_CheckHasKoreanKey in all other cases (key is not the Korean Key or a zero key!)", + "201033": "A ticket limit was exceeded (duration or launch count)", + "201034": "Returned by ES_CheckHasKoreanKey if the key is sensed to be all zeroes", + "201035": "A title with a higher version is already installed", + "201036": "Required sysversion(IOS) is not installed (only for the system menu [check])", + "201037": "Installed number of contents doesn't match TMD (only for the system menu [check])", + "201039": "Returned by DI as an ES error code when TMD not supplied for disc/nand game", + "202000": "Permission denied (returned when accessing an object for which the caller has no permission)", + "202001": "IOSC_EEXIST", + "202003": "IOSC_EMAX", + "202004": "IOSC_ENOENT", + "202005": "IOSC_INVALID_OBJTYPE", + "202006": "IOSC_INVALID_RNG", + "202007": "IOSC_INVALID_FLAG", + "202008": "IOSC_INVALID_FORMAT", + "202009": "IOSC_INVALID_VERSION", + "202010": "IOSC_INVALID_SIGNER", + "202011": "IOSC_FAIL_CHECKVALUE", + "202012": "Internal failure", + "202013": "Memory allocation failure. Known to be returned when the keyring is full (contains 0x20 keys)", + "202014": "Invalid size", + "202015": "Invalid address", + "202016": "Unaligned data", + "204000": "EC_ERROR_OK: No error", + "204001": "EC_ERROR_FAIL: Generic error", + "204002": "EC_ERROR_NOT_SUPPORTED: Feature not implemented", + "204003": "EC_ERROR_INSUFFICIENT_RESOURCE", + "204004": "EC_ERROR_INVALID", + "204005": "EC_ERROR_NOMEM ", + "204006": "EC_ERROR_NOT_FOUND", + "204007": "EC_ERROR_NOT_BUSY: no active async operation", + "204008": "EC_ERROR_BUSY", + "204009": "EC_ERROR_NOT_DONE", + "204013": "EC_ERROR_NET_NA: Internet access not available", + "204015": "EC_ERROR_WS_REPORT: Server reports a problem", + "204017": "EC_ERROR_ECARD: Invalid eCard", + "204018": "EC_ERROR_OVERFLOW: Output too big for buf provided", + "204019": "EC_ERROR_NET_CONTENT: Error getting content from server", + "204020": "EC_ERROR_CONTENT_SIZE: Downloaded content size doesn't match tmd", + "204034": "EC_ERROR_WS_RESP: invalid web service response", + "204035": "EC_ERROR_TICKET: problem importing ticket", + "204036": "EC_ERROR_TITLE: problem importing title", + "204037": "EC_ERROR_TITLE_CONTENT: problem importing title content", + "204038": "EC_ERROR_CANCELED: an extended operation was canceled", + "204039": "EC_ERROR_ALREADY: one time only action was previously done", + "204041": "EC_ERROR_INIT: library has not been initialized", + "204042": "EC_ERROR_REGISTER: device is not registered", + "204043": "EC_ERROR_WS_RECV: recv error on web service response", + "204044": "EC_ERROR_NOT_ACTIVE: expected operation is not active op", + "204045": "EC_ERROR_FILE_READ", + "204046": "EC_ERROR_FILE_WRITE", + "204050": "EC_ERROR_NOT_OWNED: Title is not owned", + "204052": "EC_ERROR_HTTP_HDR_PARSE: Could not parse http header", + "204053": "EC_ERROR_CONFIG: Invalid configuration (e.g. url is invalid)", + "204054": "EC_ERROR_CANCEL_FAILED: Could not cancel asynchronous operaton", + "204055": "EC_ERROR_USER_INODES: Operation would exceed max user inodes", + "204056": "EC_ERROR_USER_BLOCKS: Operation would exceed max user blocks", + "204057": "EC_ERROR_SYS_INODES: Operation would exceed max sys inodes", + "204058": "EC_ERROR_SYS_BLOCKS: Operation would exceed max sys blocks", + "204065": "EC_ERROR_NO_DEVICE_CODE: Operation requires device code", + "204066": "EC_ERROR_SYNC: Operation requres ticket sync", + "204069": "EC_ERROR_CONNECT: Operation requires EC_Connect()", + "204070": "EC_ERROR_NO_TMD: Title TMD is not on device", + "204071": "EC_ERROR_FIRMWARE: Title requires updated firmware", + "204074": "EC_ERROR_INVALID_PCPW: Parental control password doesn't match", + "204075": "EC_ERROR_PC_DISABLED: Parental control is not enabled", + "204076": "EC_ERROR_EULA: Customer has not agreed to EULA", + "204077": "EC_ERROR_AGE_RESTRICTED: Operation requires parental control password", + "204078": "EC_ERROR_POINTS_RESTRICTED: Operation requires parental control password", + "204079": "EC_ERROR_ALREADY_OWN: Attempt purchase already owned item", + "204080": "EC_ERROR_SHOP_SETUP: Shop channel setup not done or cleared", + "204081": "EC_ERROR_INSUFFICIENT_FUNDS: Not enough funds to purchase the item", + "204501": "HTTP 201 Created", + "204502": "HTTP 202 Accepted", + "204503": "HTTP 203 Non-Authoritative Information", + "204504": "HTTP 204 No Content", + "204505": "HTTP 205 Reset Content", + "204506": "HTTP 206 Partial Content", + "204600": "HTTP 300 Multiple Choices", + "204601": "HTTP 301 Moved Permanently", + "204602": "HTTP 302 Found", + "204603": "HTTP 303 See Other", + "204604": "HTTP 304 Not Modified", + "204607": "HTTP 307 Temporary Redirect", + "204608": "HTTP 308 Permanent Redirect", + "204700": "HTTP 400 Bad Request", + "204701": "HTTP 401 Unauthorized", + "204702": "HTTP 402 Payment Required", + "204703": "HTTP 403 Forbidden", + "204704": "HTTP 404 - Not Found", + "204704": "HTTP 404 Not Found", + "204705": "HTTP 405 Method Not Allowed", + "204706": "HTTP 406 Not Acceptable", + "204707": "HTTP 407 Proxy Authentication Required", + "204708": "HTTP 408 Request Timeout", + "204709": "HTTP 409 Conflict", + "204710": "HTTP 410 Gone", + "204711": "HTTP 411 Length Required", + "204712": "HTTP 412 Precondition Failed", + "204713": "HTTP 413 Request Too Large", + "204714": "HTTP 414 Request-URI Too Long", + "204715": "HTTP 415 Unsupported Media Type", + "204716": "HTTP 416 Range Not Satisfiable", + "204717": "HTTP 417 Expectation Failed", + "204800": "HTTP 500 - Internal Server Error", + "204800": "HTTP 500 Internal Server Error", + "204801": "HTTP 501 Not Implemented", + "204802": "HTTP 502 Bad Gateway", + "204803": "HTTP 503 Service Unavailable", + "204804": "HTTP 504 Gateway Timeout", + "204805": "HTTP 505 HTTP Version Not Supported", + "204811": "HTTP 511 Network Authentication Required", + "204901": "NHTTP_ERROR_ALLOC", + "204902": "NHTTP_ERROR_TOOMANYREQ", + "204903": "NHTTP_ERROR_SOCKET", + "204904": "NHTTP_ERROR_DNS", + "204905": "NHTTP_ERROR_CONNECT", + "204906": "NHTTP_ERROR_BUFFULL", + "204907": "NHTTP_ERROR_HTTPPARSE", + "204908": "NHTTP_ERROR_CANCELED", + "204909": "NHTTP_ERROR_REVOLUTIONSDK", + "204910": "NHTTP_ERROR_REVOLUTIONWIFI", + "204911": "NHTTP_ERROR_UNKNOWN", + "204912": "NHTTP_ERROR_DNS_PROXY", + "204913": "NHTTP_ERROR_CONNECT_PROXY", + "204914": "NHTTP_ERROR_SSL", + "204927": "IAS Unknown issuer of device cert", + "204961": "SSL_EFAILED", + "204962": "SSL_EWANT_READ", + "204963": "SSL_EWANT_WRITE", + "204964": "SSL_ESYSCALL", + "204965": "SSL_EZERO_RETURN", + "204966": "SSL_EWANT_CONNECT", + "204967": "SSL_ESSLID", + "204968": "SSL_EVERIFY_COMMON_NAME", + "204969": "SSL_EVERIFY_ROOT_CA", + "204970": "SSL_EVERIFY_CHAIN", + "204971": "SSL_EVERIFY_DATE", + "204972": "SSL_EGET_SERVER_CERT", + "204992": "EC_ERROR_NHTTP_CRX", + "204993": "EC_ERROR_NHTTP_AHF", + "204994": "EC_ERROR_NHTTP_SCCD", + "204995": "EC_ERROR_NHTTP_SRCD", + "204996": "EC_ERROR_NHTTP_SVO", + "204997": "EC_ERROR_NHTTP_PDE", + "204998": "EC_ERROR_NHTTP_PDR", + "204999": "EC_ERROR_NHTTP_SRA", + "205007": "Invalid NAND Dump (Dolphin only)", + "051330": "Internet connection error. The Wii needs a 2.4gHz signal with 802.11b/g/n enabled, and the security set to WPA2-PSK (AES). The channel must also either be set to auto or be less than 12.", + "205104": "Could not retrieve points balance", + "205114": "Could not convert points balance to integer", + "205124": "Cannot find sender friend code", + "205177": "User already exists in database", + "205540": "This software doesn't work in the vWii", + "205617": "Wii Points card code invalid", + "205618": "Wii Points card is for another country", + "205621": "Unknown error (possibly ECS gift error?)", + "205623": "Trial period for that title expired, you can't download that again", + "205600": "Generic ECS (ECommerceSOAP) error.", + "205700": "Generic ETS (ETicket Services?) error.", + "205800": "Generic PAS (Points Account System?) error.", + "205825": "Generic PAS (Points Account System?) error. (PAS_ERROR_CODE)", + "205900": "Generic IAS (IdentityAuthenticationSOAP) error.", + "206400": "Generic IAS (IdentityAuthenticationSOAP) error.", + "206600": "Generic OSS error.", + "205625": "ECS Gift error", + "205626": "Unable to send present (ECS gift error)", + "205627": "Can't buy DLC for a title you don't own.", + "205642": "Unknown error", + "205643": "Unknown error", + "205644": "Credit cards can't be used on this console.", + "205645": "Issue with your DSi shop account?", + "205646": "Unable to send present (ECS Gift)", + "205672": "ECS Account mismatch", + "205800": "Wii Points Card error", + "205810": "You don't have enough Wii Points / Error while redeeming your download ticket", + "205811": "Wii Points card expired", + "205815": "Wii Points Card was already used", + "205816": "Some error with the Wii Points Card", + "205818": "This card number can only be used for a specific title, it is not a Wii Points Card.", + "205819": "Wii Points Card code is invalid", + "205826": "Server under heavy load", + "205829": "Server under heavy load", + "205830": "Wii Points Card code is invalid", + "205831": "Wii Points Card is for another country", + "205901": "Wii number invalid!", + "205903": "Unknown error", + "205906": "Problem with your online account", + "205928": "Unknown error", + "205942": "Maintenance. Login not possible", + "205958": "Unknown error", + "205968": "Bad device code", + "205969": "Server under heavy load", + "206112": "The free title promotion has ended (ICR_END)", + "206401": "Invalid characters in nick or password", + "206499": "Maintenance. Login not possible", + "206601": "Authentication error, missing required parameters", + "206602": "Error while entering Wii Points Card code. Try again later.", + "206603": "Unable to confirm credit card information", + "206607": "Error while retrieving the served content", + "206608": "Error redeeming Wii Download Ticket", + "206610": "Wii download ticket expired", + "206611": "Wii download ticket invalid", + "206612": "This Wii download ticket can't be used in your country", + "206613": "No software available for this download ticket. May be caused by parental controls.", + "206650": "Wrong PIN (parental controls)", + "206651": "Mistake while entering the wii serial number", + "206652": "Wrong PIN three times (parental controls)", + "206653": "Nickname or password wrong", + "206660": "No progress was made in the last operation", + "206661": "Credit card type invalid", + "206662": "Credit card number invalid", + "206663": "An operation is in progress", + "206664": "No security code was provided", + "206667": "Wii download ticket invalid", + "206668": "Happens when current points count + new points would exceed the wii points limit", + "206669": "Wii Points card invalid", + "206670": "Invalid friend code", + "206671": "Invalid/Wrong Wii Shop title ID", + "206672": "No title info (Wii Shop)", + "206673": "Invalid registration status", + "206674": "Unexpected eclib error", + "206699": "Try again later", + "208000": "You have entered the wrong state", + "208001": "Unable to process for credit cards (some kind of blacklist?)", + "208002": "Billing address invalid", + "208003": "Credit card number doesn't match card type", + "208004": "three-digit security code invalid", + "208005": "Mistake in credit card data.", + "208006": "Card number invalid", + "208007": "Expiration date invalid", + "208008": "Postal code invalid", + "208009": "Technical difficulties.", + "208010": "Credit card could not get validated. Try again later.", + "208011": "Credit card declined", + "208012": "Credit card declined - no funds available", + "208013": "Credit card declined - inactive", + "208014": "Credit card expired", + "208015": "Credit card code invalid", + "208016": "Credit card number invalid", + "208017": "Credit card limit reached", + "208018": "Credit card invalid", + "208019": "Postal / zip code invalid", + "208021": "Refund is in progress", + "208022": "Refund was already processed", + "208023": "Refund error", + "208025": "Empty security code", + "209531": "HTTP 404 Not Found", + "209552": "Timeout occurred between client and server", + "209553": "Timeout occurred between client and server", + "209554": "Timeout occurred between client and server", + "209555": "Timeout occurred between client and server", + "209556": "Timeout occurred between client and server", + "209557": "Timeout occurred between client and server", + "209593": "Access denied by Opera's Wii Shop domain filter", + "209600": "Connection Timeout, the shop took too long to load", + "209601": "Connection Timeout, the shop took too long to load", + "209620": "Some JS files couldn't be loaded (shopErrCheck)", + "209622": "SSL CA unknown / not included in channel", + "209622": "SSL CA unknown / not included in channel", + "209631": "Invalid SD Card", + "209632": "The SD Card is inserted(?)", + "209633": "The SD Card is not inserted", + "209634": "Unknown SD Card cluster (not 32k)", + "209635": "Incorrect SD Card alignment", + "209636": "Incorrect SD Card Device", + "209637": "The title's ticket is not present on the SD", + "209638": "SDCARD_ERROR_ACCESS", + "209639": "SDCARD_ERROR_CANCELLED (cancelBackupToSDCard successful?)", + "209640": "SDCARD_ERROR_CONTENT_INVALID (Banner is not found)", + "209641": "SDCARD_ERROR_MAXFD (?)", + "209642": "The SD Card is out of memory", + "209643": "The SD Card is corrupted (NAND_CORRUPT ERROR (Serious error))", + "209644": "SDCARD_ERROR_ECC_CRIT (?)", + "209645": "SD Authentication error(?)", + "209646": "Fatal error with the SD Card", + "209647": "Unknown SD Card", + "209648": "The SD Card is not inserted", + "209649": "The SD Card is not supported", + "209650": "SD Card File system is broken", + "209651": "SD is write protected", + "209652": "No space left in the SD", + "209653": "Other SD error", + "209654": "Unknown SD Error", + "209655": "SDCARD_ERROR_WANT_OF_CAPACITY (SD full)", + "209656": "SDCARD_ERROR_EXIST_CHECK_SOFT (title already present on SD)", + "209657": "SDCARD_ERROR_EXCEPTION_STATE (Illegal statement and cancelBackupToSDCard error)", + "209661": "EXIST_CHECK_SOFT_NAND", + "209662": "errChannel", + "209663": "errInodes", + "209664": "SD Backup timeout in B-10", + "209665": "JournalFlag error in B-10", + "209666": "Available space error in B-09 on checking remain size", + "209667": "Available space is not sufficient (NAND)", + "209800": "No DNS Entry for oss-auth.shop.wii.com", + "209XXX": "Server connection timeout", + "220000": "Connection failed", + "220001": "Unknown protocol", + "220002": "Out of memory", + "220003": "The requested URL was filtered by Opera's filter", + "220101": "Allocation error", + "220102": "Unsupported file", + "220103": "Empty file", + "220104": "Invalid file", + "220105": "Javascript error", + "220106": "Plugin error", + "220201": "Not found", + "220202": "Connection refused", + "220003": "Filtered URL", + "220000": "Connection Failed", + "220002": "Out of memory", + "220001": "Unknown protocol", + "250943": "Problems with your Club Nintendo -account. It can't get connected with your shop account" +} + def parse_error_codes(error_codes): exact_codes = {} @@ -549,6 +464,10 @@ def matches_wildcard(code, wildcard_code): return re.fullmatch(pattern, str(code)) is not None def get_error_message(code): + if str(code) in error_codes: + return f"{code}: {error_codes[str(code)]}" + else: + return f"{code}: Error code not found." # Connect to the SQLite database conn = sqlite3.connect('error_codes.db') cursor = conn.cursor() @@ -568,17 +487,17 @@ def get_error_message(code): return f"{code}: Error code not found." -def check_url(): +def check_url(uri): global url_status # Declare the global variable to modify it try: - response = requests.get(url, verify=False, timeout=10) # Disable SSL verification and set a timeout + response = requests.get(uri, verify=False, timeout=10) # Disable SSL verification and set a timeout url_status = ":green_square: Up" # If we get a response, set status to "Up" except requests.exceptions.RequestException: url_status = ":red_square: Down" # If there's an exception, set status to "Down" @bot.hybrid_command(name="status",description="Gets the status of WiiMart") async def statusy(ctx): - check_url() + check_url(url) if status == "Not Set": await ctx.send(f"WiiMart Status: {url_status}\nAdmin Status: :person_shrugging: Currently Unset") else: @@ -657,7 +576,7 @@ async def getfc(ctx, member: discord.Member): @bot.hybrid_command(name="forceaddfc", description="Force adds the users Wii Friend code to the list of friend codes so that others can add them") @commands.has_any_role("Owner", "Admin", "Moderators") -async def addfc(ctx, user: discord.Member, fc: int): +async def addfcadm(ctx, user: discord.Member, fc: int): await ctx.defer(ephemeral=True) if len(str(fc)) != 16: userid = user.id @@ -715,25 +634,12 @@ def start_bot(): bot.run(token) # Or however you start your bot if __name__ == "__main__": - try: - os.remove("error_codes.db") - except Exception as e: - #print("i cant let you do that dave...") - logging.warning("i cant let you do that dave...") - create_database() - - leader_election = LeaderElection() - - # Initial leadership attempt - if leader_election.attempt_leadership(): - start_bot() - else: - #print("Running in follower mode - waiting for leadership") - logging.info("Running in follower mode - waiting for leadership") - # Start health check in background - threading.Thread(target=health_check, args=(leader_election,), daemon=True).start() - - # Keep the main thread alive - while True: - time.sleep(3600) + #try: + # os.remove("error_codes.db") + #except Exception as e: + # #print("i cant let you do that dave...") + # logging.warning("i cant let you do that dave...") + #create_database() + logging.info("Creation of database disabled") + start_bot()