Skip to main content

UNOFFICIAL Lightweight Python client for the OpenShock API

Project description

OpenShock Python

Unofficial, lightweight helper for the OpenShock API. Designed to be easy to use for anyone, with optional advanced controls for developers.

What this project offers

  • Simple Python client to list devices/shockers and send actions (shock, vibrate, beep).
  • Optional CLI for quick checks without writing code.
  • Keeps your API key in memory only; the CLI can store it securely via your system keyring.

License TL;DR (see full LICENSE.md for complete terms)

  • Free for non-commercial, ethical use; you may study, modify, and share it.
  • You can include it in other open-source projects as a separate library component.
  • You must share source code for adaptations you distribute.
  • No commercial use, monetization, or commercial AI training without a separate license.
  • Adaptations must keep this license (unless used as a distinct component as allowed in Section 6A).

Quick start (Python)

  1. Install the library:

    pip install Nanashi-OpenShockPY
    
  2. Get your OpenShock API key from your account dashboard.

  3. Create a client with a User-Agent and your API key:

    from OpenShockPY import OpenShockClient
    
    client = OpenShockClient(
        api_key="YOUR_API_KEY",
        user_agent="YourAppName/1.0",
    )
    
  4. List devices or send an action:

    print(client.list_devices())
    client.shock("YOUR_SHOCKER_ID", intensity=50, duration=1000)
    client.stop("YOUR_SHOCKER_ID")  # Stop all actions
    
    # Or send to all shockers at once
    client.shock_all(intensity=50, duration=1000)
    client.stop_all()
    

Optional CLI (no coding needed)

Install with CLI support:

pip install "Nanashi-OpenShockPY[cli]"

Store your API key securely, then list devices:

python -m OpenShockPY.cli login --api-key YOUR_KEY
python -m OpenShockPY.cli devices

Send a command (use a shocker ID, not a device ID):

python -m OpenShockPY.cli shock --shocker-id YOUR_SHOCKER_ID --intensity 40 --duration 1500

Or send a command to all shockers at once:

python -m OpenShockPY.cli shock --shocker-id all --intensity 40 --duration 1500

The CLI automatically sets an appropriate User-Agent.

Async client (opt-in)

If you prefer non-blocking operation, there is an asynchronous client available: AsyncOpenShockClient. Install the optional dependencies:

pip install Nanashi-OpenShockPY[async]

Usage:

import asyncio
from OpenShockPY import AsyncOpenShockClient

async def main():
    async with AsyncOpenShockClient(api_key="YOUR_API_KEY", user_agent="YourApp/1.0") as client:
        devices = await client.list_devices()
        await client.shock_all(intensity=50, duration=1000)
        await client.stop_all()

asyncio.run(main())

⚠️ Experimental / Unsupported: The AsyncOpenShockClient is an opt-in, experimental client provided for convenience. It is not officially supported or fully tested in production scenarios. Use at your own risk — APIs, behavior, or method signatures may change without notice. If stability and long-term support are required, prefer the synchronous OpenShockClient.

Installation options

  • Library only (most people): pip install Nanashi-OpenShockPY
  • Library + CLI extras (adds keyring): pip install "Nanashi-OpenShockPY[cli]"
  • Library + Async extras (adds httpx, pytest-asyncio, respx): pip install "Nanashi-OpenShockPY[async]"
  • Library + all extras: pip install "Nanashi-OpenShockPY[all]"
  • Development/editable install from this repo: pip install -e . (or pip install -e ".[cli]" for CLI, pip install -e ".[all]" for all extras)

Responsible use and licensing

  • This project is for non-commercial, ethical use only. Commercial use requires a separate license.
  • Respect local laws and the rights and safety of others when issuing control commands.
  • Full terms: LICENSE.md.

Need more detail?

Advanced options, API notes, and developer tips are available in ADVANCED.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nanashi_openshockpy-0.0.0.11.tar.gz (16.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nanashi_openshockpy-0.0.0.11-py3-none-any.whl (15.9 kB view details)

Uploaded Python 3

File details

Details for the file nanashi_openshockpy-0.0.0.11.tar.gz.

File metadata

  • Download URL: nanashi_openshockpy-0.0.0.11.tar.gz
  • Upload date:
  • Size: 16.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.9

File hashes

Hashes for nanashi_openshockpy-0.0.0.11.tar.gz
Algorithm Hash digest
SHA256 f5375965c7e486a1b8a3a2c47cebc1db13c3bd6a1d410bf92d97badb003baa6a
MD5 957199383412e6589b0d9dada9902877
BLAKE2b-256 74908cf1bd5beccd8c547a91c3f05e141bc138d4d9c6d1f87d68dfac21f1aad8

See more details on using hashes here.

Provenance

The following attestation bundles were made for nanashi_openshockpy-0.0.0.11.tar.gz:

Publisher: python-publish.yml on NanashiTheNameless/OpenShockPY

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nanashi_openshockpy-0.0.0.11-py3-none-any.whl.

File metadata

File hashes

Hashes for nanashi_openshockpy-0.0.0.11-py3-none-any.whl
Algorithm Hash digest
SHA256 c425b093c67760f4954529a046da59cf9c0386d106297db314b3b545872126f4
MD5 fb9b51588699f245e8f577461a63a926
BLAKE2b-256 c7a2049e7a603ec651dc74d7a3ef423eea39bc0195ea56280623dc8784294b0f

See more details on using hashes here.

Provenance

The following attestation bundles were made for nanashi_openshockpy-0.0.0.11-py3-none-any.whl:

Publisher: python-publish.yml on NanashiTheNameless/OpenShockPY

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page