disagreement/examples/voice_bot.py

54 lines
1.3 KiB
Python

"""Example bot demonstrating voice channel playback."""
import os
import asyncio
import sys
# If running from the examples directory
if os.path.join(os.getcwd(), "examples") == os.path.dirname(os.path.abspath(__file__)):
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
from typing import cast
try:
from dotenv import load_dotenv
except ImportError: # pragma: no cover - example helper
load_dotenv = None
print("python-dotenv is not installed. Environment variables will not be loaded")
import disagreement
if load_dotenv:
load_dotenv()
_TOKEN = os.getenv("DISCORD_BOT_TOKEN")
_GUILD_ID = os.getenv("DISCORD_GUILD_ID")
_CHANNEL_ID = os.getenv("DISCORD_VOICE_CHANNEL")
if not all([_TOKEN, _GUILD_ID, _CHANNEL_ID]):
print("Missing one or more required environment variables for voice connection")
sys.exit(1)
assert _TOKEN
assert _GUILD_ID
assert _CHANNEL_ID
TOKEN = cast(str, _TOKEN)
GUILD_ID = cast(str, _GUILD_ID)
CHANNEL_ID = cast(str, _CHANNEL_ID)
async def main() -> None:
client = disagreement.Client(TOKEN)
await client.connect()
voice = await client.join_voice(GUILD_ID, CHANNEL_ID)
try:
await voice.play_file("welcome.mp3")
finally:
await voice.close()
await client.close()
if __name__ == "__main__":
asyncio.run(main())