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 )