{"id":37073076,"url":"https://github.com/discloud/python-discloud-status","last_synced_at":"2026-01-14T08:34:39.317Z","repository":{"id":35892343,"uuid":"219765380","full_name":"discloud/python-discloud-status","owner":"discloud","description":"Python wrapper for DisCloud API","archived":false,"fork":false,"pushed_at":"2025-08-10T21:05:07.000Z","size":89,"stargazers_count":14,"open_issues_count":0,"forks_count":5,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-11-27T17:47:20.614Z","etag":null,"topics":["discloud","discord","python"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/discloud/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/discloud.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-11-05T14:29:35.000Z","updated_at":"2025-08-10T21:05:12.000Z","dependencies_parsed_at":"2025-08-10T23:05:26.514Z","dependency_job_id":"4ebf6bb1-31a6-44d5-b7c0-dba435bb6b06","html_url":"https://github.com/discloud/python-discloud-status","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/discloud/python-discloud-status","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/discloud%2Fpython-discloud-status","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/discloud%2Fpython-discloud-status/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/discloud%2Fpython-discloud-status/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/discloud%2Fpython-discloud-status/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/discloud","download_url":"https://codeload.github.com/discloud/python-discloud-status/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/discloud%2Fpython-discloud-status/sbom","scorecard":{"id":344518,"data":{"date":"2025-08-11","repo":{"name":"github.com/discloud/python-discloud-status","commit":"2414794bcce528395f0d017abc311875c48cea5f"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.2,"checks":[{"name":"Maintained","score":5,"reason":"7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 1/24 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 7 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"16 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2023-120 / GHSA-45c4-8wx5-qw6w","Warn: Project is vulnerable to: GHSA-5m98-qgg9-wh84","Warn: Project is vulnerable to: GHSA-7gpw-8wmc-pm8g","Warn: Project is vulnerable to: GHSA-8495-4g3g-x7pr","Warn: Project is vulnerable to: PYSEC-2024-26 / GHSA-8qpw-xqxj-h4r2","Warn: Project is vulnerable to: GHSA-9548-qrrj-x5pj","Warn: Project is vulnerable to: PYSEC-2023-246 / GHSA-gfw2-4jvh-wgfg","Warn: Project is vulnerable to: GHSA-pjjw-qhg8-p2p9","Warn: Project is vulnerable to: PYSEC-2023-250 / GHSA-q3qx-c6g2-7pw2","Warn: Project is vulnerable to: PYSEC-2023-251 / GHSA-qvrw-v9rv-5rjx","Warn: Project is vulnerable to: PYSEC-2021-76 / GHSA-v6wp-4m6f-gcjg","Warn: Project is vulnerable to: PYSEC-2023-247 / GHSA-xx9p-xxvh-7g8j","Warn: Project is vulnerable to: PYSEC-2013-22 / GHSA-27x4-j476-jp5f","Warn: Project is vulnerable to: PYSEC-2025-49 / GHSA-5rjg-fvgr-3xxf","Warn: Project is vulnerable to: GHSA-cx63-2mw6-8hw5","Warn: Project is vulnerable to: PYSEC-2022-43012 / GHSA-r9hx-vwmv-q579"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-18T06:44:14.047Z","repository_id":35892343,"created_at":"2025-08-18T06:44:14.047Z","updated_at":"2025-08-18T06:44:14.047Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28414420,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:31:27.429Z","status":"ssl_error","status_checked_at":"2026-01-14T08:31:19.098Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["discloud","discord","python"],"created_at":"2026-01-14T08:34:38.535Z","updated_at":"2026-01-14T08:34:39.306Z","avatar_url":"https://github.com/discloud.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Installing\n```\npip install discloud\n```\n## Dev installing\nNote: need https://git-scm.com to download\n```\npip install git+https://github.com/discloud/python-discloud-status@master\n```\n\n## Usage\n### Get Started\nFirst of all, you need to get your Discloud API-Token. You can create a new one by typing `.api` in the [Discloud Server](https://discord.discloudbot.com).\nIf you're in trouble on getting your Discloud API-Token, you can DM the Ticket bot (DisCloud ModMail#6424) in the server. The supporters will be glad on helping you\n\n### Understanding the returns\n#### Action\nAll methods that doesn't get information(e.g. start app/change ram/add mod) returns an `Action`. It has `.status` attribute, which is either \"ok\" when no issues happened, or \"error\" when something happened. It also contains `.message` attribute which is always returned when an error ocurrs, and is given on almost all actions.\n\n#### Backup\nBackup has a `.url` attribute that gives the application's backup link.\n#### Logs\nLogs has a `.small` attribute which returns the last ~1800 chars of your app logs, and a `.full` attribute that gives the complete logs\n#### User\nWIP\n#### Application\nWIP\n\n### Creating a client\n```python\nimport discloud\nclient = discloud.Client(\"API-Token\")\n```\n\n### Userinfo\n```python\nuser = await client.user_info()\nprint(f\"ID: '{user.id}'\")\nplan = user.plan\nprint(f\"Plan '{plan}'\")\nprint(f\"Expire date '{plan.expire_date}'\")\nprint(f\"Ends in '{plan.expires_in}'\")\nprint(f\"Used ram '{user.using_ram}'\")\nprint(f\"Total ram '{user.total_ram}'\")\nprint(f\"Locale '{user.locale}'\")\n```\n\n### Application\n\n#### Info\n```python\nbot = await client.app_info(target=\"APP_ID\")\nprint(f\"ID '{bot.id}'\")\nprint(f\"Avatar '{bot.avatarURL}'\")\nprint(f\"Name '{bot.name}'\")\nprint(f\"Online '{bot.online}'\")\nprint(f\"Main file '{bot.mainFile}'\")\nprint(f\"Language '{bot.lang}'\")\nprint(f\"Auto deploy '{bot.autoDeployGit}'\")\nprint(f\"Auto restart '{bot.autoRestart}'\")\n```\n\n#### Status\n```python\nbot = await client.app_status(target=\"APP_ID\")\nprint(f\"ID '{bot.id}'\")\nprint(f\"Status '{bot.status}'\")\nprint(f\"CPU '{bot.cpu}'\")\nprint(f\"Memory '{bot.memory}'\")\nprint(f\"Memory available '{bot.memory.available}'\")\nprint(f\"Using memory '{bot.memory.using}'\")\nprint(f\"Mem usada '{bot.memory.using}'\")\nprint(f\"SSD '{bot.ssd}'\")\nprint(f\"Download '{bot.net_info.download}'\")\nprint(f\"Upload '{bot.net_info.upload}'\")\nprint(f\"Online since '{bot.online_since}'\")\nprint(f\"Started at '{bot.start_date}'\")\n```\n\n#### Logs\n`Client.app_logs()` returns a Logs. The`.logs` attribute will give you the full logs content, `.small_logs` will give the last 1800 characters\n```python\nlogs = await client.logs(target=\"APP_ID\")\n\nprint(logs.full) # complete logs\nprint(logs.small) # around last 1800 characters of your logs\n```\n\n#### Start/Restart/Stop\n`Client.start()`/`Client.restart()`/`Client.stop()` returns an `Action`.\n```python\n# note: don't expect to get the results there if you use inside of your bot since its going to get shutdown\nstart_result = await client.start(target=\"APP_ID\")\nrestart_result = await client.restart(target=\"APP_ID\")\nstop_result = await client.stop(target=\"APP_ID\")\n\nprint(start_result) # See if the start was successful\nprint(restart_result) # See if the restart was successful\nprint(stop_result) # See if the stop was successful\n```\n\n#### Commit\n`Client.commit()` returns an `Action`.\n```python\n# note: this always restart your bot so you won't get a result if its inside of your bot\nfile = discloud.File(\"eggs.zip\") # Must be .zip\nresult = await client.commit(app_id=\"APP_ID\", file=file)\n\nprint(result.message) # See if the commit was successful\n```\n\n#### Backup\n`Client.backup()` returns a Backup. The `.url` attribute will give you the link\n```python\nbackup = await client.backup(target=\"APP_ID\")\nprint(backup.url) # Get backup url\n```\n\n#### Update Ram\n`Client.ram()` returns an `Action`.\n```python\nresult = await client.ram(app_id=\"APP_ID\", NEW_RAM)\nprint(result.message) # See if ram memory was updated\n```\n\n#### Upload\n`Client.upload_app()` returns an `Action`.\nNote: the .zip must have a `discloud.config` file, more info at [documentation](https://docs.discloudbot.com/v/en/suport/faq/discloud.config)\n```python\nresult = await client.upload_app(file=discloud.File(\"my_bot.zip\"))\nprint(result.message) # See if the app was successfully added\n```\n\n\n#### Delete\n`Client.delete_app()` returns an `Action`.\n```python\nresult = await client.delete_app(app_id=\"APP_ID\")\nprint(result.message) # See if the app was successfully deleted\n```\n\n### Mods System\nFirst you need to setup a specific client to manage bot mods or manage a bot as mod.\n```python\nimport discloud\n\nclient = discloud.Client(\"API-Token\")\nmod_client = discloud.ModManager(client, \"APP_ID\")\n```\nSecond, be aware of what mods can currently do, actually they can have one or more of these permissions:\n\"start_app\", \"stop_app\", \"restart_app\", \"logs_app\", \"commit_app\", \"edit_ram\", \"backup_app\", \"status_app\"\n#### Application Owners\nTo add a moderator to your app you must first have a `Gold Plan` or above.\n##### Adding a moderator\n`ModManager.add_mod()`\n```python\npermissions = [\"start_app\"]\nawait mod_client.add_mod(mod_id=\"MOD_ID\", permissions)\n```\n##### Removing a moderator\n`ModManager.remove_mod()`\n```python\nawait mod_client.remove_mod(mod_id=\"MOD_ID\")\n```\n\n##### Changing moderator permissions\n`ModManager.edit_mod_perms()`\n```python\nnew_permissions = [\"start_app\", \"restart_app\"] # note: this remove existing perms if they are not there\nawait mod_client.edit_mod_perms(mod_id=\"MOD_ID\", new_permissions)\n```\n\n##### Getting all moderators\n`ModManager.get_mods()`\n```python\nmods = await mod_client.get_mods()\nprint(mods) # \n```\n\n#### Application moderators\nFor each command you can do you will need the respective permission as mentioned above\nCommands: `ModManager.start()`, `ModManager.restart()`, `ModManager.stop()`, `ModManager.commit()`, `ModManager.backup()`, `ModManager.logs()`,  `ModManager.ram()`, `ModManager.status()`, \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiscloud%2Fpython-discloud-status","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdiscloud%2Fpython-discloud-status","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiscloud%2Fpython-discloud-status/lists"}