Wrapper for 7TV EventAPI.
Project description
7TV EventAPI Wrapper
This is a Python wrapper for the 7TV EventAPI, which provides async access to the websocket events on their Emote Platform.
Requirements
- Python 3.8 or higher
Installation
You can install the 7TV EventAPI Wrapper using pip. Open your terminal and run the following command:
pip install eventapi
Usage
Here's a simple example of how to use wrapper:
import asyncio
from eventapi.EventApi import EventApi
from eventapi.WebSocket import (
EventType,
ResponseTypes,
SubscriptionCondition,
SubscriptionData,
)
async def callback(data: ResponseTypes):
print("Message from callback: ", data)
async def main():
# create instance of EventApi with message callback
app = EventApi(callback=callback)
# connect to websocket
await app.connect()
print("Connected")
# create subscription with specified condition
condition = SubscriptionCondition(object_id="6433b7cec07d26f890dd2d01")
subscription = SubscriptionData(
subscription_type=EventType.EMOTE_SET_ALL, condition=condition
)
await app.subscribe(subscription_data=subscription)
# you can also use async iterator without specifying callback
async for message in app:
print("Message from async iterator: ", message)
# run forever if we are not using async for
await asyncio.Future()
asyncio.run(main())
Discord.py / Pycord example:
from typing import Any, Dict, List
import aiohttp
import discord
from eventapi.EventApi import EventApi
from eventapi.WebSocket import (
Dispatch,
EventType,
ResponseTypes,
SubscriptionCondition,
SubscriptionData,
)
async def format_url(data: Dict[str, Any]) -> str:
base_url = "https://cdn.7tv.app/emote/{}/4x".format(data.get("id"))
if "animated" not in data:
async with aiohttp.ClientSession() as cs:
async with cs.get(base_url + ".gif") as r:
if r.status == 200:
base_url += ".gif"
else:
if data.get("animated"):
base_url += ".gif"
return base_url
async def callback(data: ResponseTypes) -> None:
if not isinstance(data, Dispatch):
return
if data.type != EventType.EMOTE_SET_UPDATE:
return
channel = client.get_channel(927288026000945162) # your channel id
changes: List[discord.Embed] = []
def add_change(description: str, color: discord.Color, image_url: str):
changes.append(
discord.Embed(description=description, color=color).set_image(url=image_url)
)
if data.body.pulled:
for pulled in data.body.pulled:
add_change(
"**Deleted emote:** `{}`".format(pulled.old_value.get("name")),
discord.Color.brand_red(),
await format_url(pulled.old_value),
)
if data.body.pushed:
for pushed in data.body.pushed:
add_change(
"**Added emote:** `{}`".format(pushed.value.get("name")),
discord.Color.brand_green(),
await format_url(pushed.value.get("data")),
)
if data.body.updated:
for updated in data.body.updated:
add_change(
"**Edited emote:** `{}` » `{}`".format(
updated.old_value.get("name"), updated.value.get("name")
),
discord.Color.yellow(),
await format_url(updated.value),
)
if len(changes) > 0:
await channel.send(embeds=changes)
intents = discord.Intents.default()
client = discord.Client(intents=intents)
client.eventapi = EventApi(callback=callback)
@client.listen("on_ready", once=True)
async def on_ready():
await client.eventapi.connect()
condition = SubscriptionCondition(
object_id="6433b7cec07d26f890dd2d01"
) # your emote-set id
subscription = SubscriptionData(
subscription_type=EventType.EMOTE_SET_ALL, condition=condition
)
await client.eventapi.subscribe(subscription_data=subscription)
client.run("your token here") # your token
Contributing
Contributions are welcome! If you encounter any issues or have suggestions for improvements, please open an issue or submit a pull request on the GitHub repository.
License
This project is licensed under the MIT License.
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
Built Distribution
File details
Details for the file eventapi-1.1.0.tar.gz
.
File metadata
- Download URL: eventapi-1.1.0.tar.gz
- Upload date:
- Size: 10.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fa8ad6b8dad684653d33c6147b49b363968fa61a369d0c0df8b080953120ecce |
|
MD5 | ced0c57644b443e567aed458df59a9b4 |
|
BLAKE2b-256 | e56497fa438435af600d3b23e67842558ea2b523ff42cf94d85950a118bb747e |
File details
Details for the file eventapi-1.1.0-py3-none-any.whl
.
File metadata
- Download URL: eventapi-1.1.0-py3-none-any.whl
- Upload date:
- Size: 9.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 99e723ba2db680859671d6d27fdea208b104352e8e2e6f48b28858301a121f16 |
|
MD5 | 0410c60f6a9ecf88d8953863c1a5a8ba |
|
BLAKE2b-256 | 121f1fba88c2a285b2a429b9c7bf85ccc191938ad271101ba021b0d3d9b57b22 |