81 lines
3.1 KiB
Python
81 lines
3.1 KiB
Python
import argparse, platform, os
|
|
from discord import Intents, Client, Member, opus, Activity, ActivityType
|
|
from discord.ext import commands
|
|
from NoiseGatev2 import NoiseGate
|
|
|
|
# Load the proper OPUS library for the device being used
|
|
async def load_opus():
|
|
# Check the system type and load the correct library
|
|
# Linux ARM AARCH64 running 32bit OS
|
|
processor = platform.machine()
|
|
script_dir = os.path.dirname(os.path.abspath(__file__))
|
|
print("Processor: ", processor)
|
|
if os.name == 'nt':
|
|
if processor == "AMD64":
|
|
opus.load_opus(os.path.join(script_dir, './opus/libopus_amd64.dll'))
|
|
print(f"Loaded OPUS library for AMD64")
|
|
return "AMD64"
|
|
else:
|
|
if processor == "aarch64":
|
|
opus.load_opus(os.path.join(script_dir, './opus/libopus_aarcch64.so'))
|
|
print(f"Loaded OPUS library for aarch64")
|
|
return "aarch64"
|
|
elif processor == "armv7l":
|
|
opus.load_opus(os.path.join(script_dir, './opus/libopus_armv7l.so'))
|
|
print(f"Loaded OPUS library for armv7l")
|
|
return "armv7l"
|
|
|
|
|
|
def main(clientId='OTQzNzQyMDQwMjU1MTE1MzA0.Yg3eRA.ZxEbRr55xahjfaUmPY8pmS-RHTY', channelId=367396189529833476, NGThreshold=50, deviceId=1, presence="the radio"):
|
|
intents = Intents.default()
|
|
|
|
client = commands.Bot(command_prefix='!', intents=intents)
|
|
|
|
@client.event
|
|
async def on_ready():
|
|
print(f'We have logged in as {client.user}')
|
|
# Set the presence of the bot (what it's listening to)
|
|
await client.change_presence(activity=Activity(type=ActivityType.listening, name=presence))
|
|
|
|
channelIdToJoin = client.get_channel(channelId)
|
|
print("Channel", channelIdToJoin)
|
|
|
|
print("Loading opus")
|
|
await load_opus()
|
|
|
|
if opus.is_loaded():
|
|
print("Joining voice")
|
|
channelConnection = await channelIdToJoin.connect(timeout=60.0, reconnect=True)
|
|
print("Voice Connected")
|
|
streamHandler = NoiseGate(
|
|
_input_device_index=deviceId,
|
|
_voice_connection=channelConnection,
|
|
_noise_gate_threshold=NGThreshold)
|
|
# Start the audio stream
|
|
streamHandler.run()
|
|
print("stream running")
|
|
|
|
|
|
client.run(clientId)
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("deviceId", type=int, help="The ID of the audio device to use")
|
|
parser.add_argument("channelId", type=int, help="The ID of the voice channel to use")
|
|
parser.add_argument("clientId", type=str, help="The discord client ID")
|
|
parser.add_argument("-n", "--NGThreshold", type=int, help="Change the noisegate threshold. This defaults to 50")
|
|
parser.add_argument("-p", "--presence", type=str, help="What the bot should be listening to")
|
|
args = parser.parse_args()
|
|
|
|
if (not args.NGThreshold):
|
|
args.NGThreshold = 50
|
|
|
|
print("Arguments:", args)
|
|
|
|
main(
|
|
clientId=args.clientId,
|
|
channelId=args.channelId,
|
|
NGThreshold=args.NGThreshold,
|
|
deviceId=args.deviceId,
|
|
presence=args.presence
|
|
) |