async def process_message_args(server_name, parsed_args, message): if parsed_args.help: asyncio.create_task(discord_service.get_service_manager().send_message( discord_service.Response(server_name, format_help()))) if parsed_args.secret: asyncio.create_task(discord_service.get_service_manager().send_message( discord_service.Response( server_name, 'Thank you, cnofafva, for giving me life!'))) if parsed_args.about: asyncio.create_task(discord_service.get_service_manager().send_message( discord_service.Response(server_name, ( 'This bot is open source and can be built for any DayZ server\n' 'For more information, visit https://github.com/schana/carim-discord-bot' )))) await process_admin_args(server_name, parsed_args, message)
async def on_message(self, message: discord.Message): if message.author == self.user: return for server_name in config.get_server_names(): if config.get_server(server_name).rcon_password is not None: if message.channel.id == config.get_server( server_name).chat_channel_id: await arguments.process_chat(server_name, message) elif message.channel.id == config.get_server(server_name).admin_channel_id \ and message.content.startswith('--'): args = shlex.split(message.content, comments=True) try: parsed_args, remaining_args = arguments.message_parser.parse_known_args( args) except (ValueError, argparse.ArgumentError): log.info(f'invalid command {message.content}') return if remaining_args == args: log.info(f'invalid command {message.content}') asyncio.create_task( discord_service.get_service_manager().send_message( discord_service.Response( server_name, f'invalid command\n`{message.content}`'))) else: await arguments.process_message_args( server_name, parsed_args, message) if message.channel.id in config.get( ).user_channel_ids and message.content.startswith('--'): args = shlex.split(message.content, comments=True) try: parsed_args, remaining_args = arguments.user_message_parser.parse_known_args( args) if remaining_args == args: return except (ValueError, argparse.ArgumentError): log.info(f'invalid command {message.content}') asyncio.create_task( discord_service.get_service_manager().send_message( discord_service.UserResponse( message.channel.id, f'invalid command\n`{message.content}`'))) return await arguments.process_user_message_args(message.channel.id, parsed_args) for custom_command in config.get().custom_commands: custom_command: message_builder.Response = custom_command if custom_command.enabled: if message.channel.id in custom_command.channels or len( custom_command.channels) == 0: if re.match(custom_command.command, message.content): embed = custom_command.generate() if len(embed) <= 6000: await message.channel.send(embed=embed) else: await message.channel.send( f'Message longer than 6000 character limit: {len(embed)}' )
async def process_admin_args(server_name, parsed_args, message): if parsed_args.list_priority: cf_message = omega_service.QueuePriorityList(server_name) await omega_service.get_service_manager().send_message(cf_message) try: result = await cf_message.result result = json.dumps(result, indent=1) asyncio.create_task( discord_service.get_service_manager().send_message( discord_service.Response( server_name, f'**Queue Priority**\n```{result}```'))) except asyncio.CancelledError: asyncio.create_task( discord_service.get_service_manager().send_message( discord_service.Response( server_name, f'**Queue Priority**\nquery timed out'))) if 'create_priority' in parsed_args: cftools_id, comment, days = parsed_args.create_priority try: days = int(days) if days != -1: expires_at = datetime.datetime.now( tz=datetime.timezone.utc) + datetime.timedelta(days=days) expires_at = expires_at.timestamp() else: expires_at = -1 except ValueError: asyncio.create_task( discord_service.get_service_manager().send_message( discord_service.Response(server_name, f'Invalid days: {days}'))) return cf_message = omega_service.QueuePriorityCreate(server_name, cftools_id, comment, expires_at) await omega_service.get_service_manager().send_message(cf_message) try: result = await cf_message.result asyncio.create_task( discord_service.get_service_manager().send_message( discord_service.Response( server_name, f'**Create Priority**\n{result}'))) except asyncio.CancelledError: asyncio.create_task( discord_service.get_service_manager().send_message( discord_service.Response( server_name, f'**Create Priority**\nquery timed out'))) if 'revoke_priority' in parsed_args: cftools_id = parsed_args.revoke_priority cf_message = omega_service.QueuePriorityRevoke(server_name, cftools_id) await omega_service.get_service_manager().send_message(cf_message) try: result = await cf_message.result asyncio.create_task( discord_service.get_service_manager().send_message( discord_service.Response( server_name, f'**Revoke Priority**\n{result}'))) except asyncio.CancelledError: asyncio.create_task( discord_service.get_service_manager().send_message( discord_service.Response( server_name, f'**Revoke Priority**\nquery timed out'))) if 'command' in parsed_args: if parsed_args.command is None: command = 'commands' else: command = parsed_args.command service_message = rcon_service.Command(server_name, command) await rcon_service.get_service_manager(server_name).send_message( service_message) try: result = await service_message.result asyncio.create_task(discord_service.get_service_manager( ).send_message( discord_service.Response( server_name, f'**{command}**\n{str(result) if result else "success"}'))) except asyncio.CancelledError: asyncio.create_task( discord_service.get_service_manager().send_message( discord_service.Response( server_name, f'**{command}**\nquery timed out'))) if 'shutdown' in parsed_args: if parsed_args.shutdown is not None: delay = parsed_args.shutdown else: delay = 0 service_message = rcon_service.SafeShutdown(server_name, delay) await rcon_service.get_service_manager(server_name).send_message( service_message) if parsed_args.status: commands_info = list() commands_config = config.get_server(server_name).scheduled_commands for i, command_config in enumerate(commands_config): sc = scheduled_command.get_service_manager(server_name, i) next_run = sc.command['next'] if not isinstance(next_run, str): next_run = datetime.timedelta(seconds=next_run) next_run -= datetime.timedelta( microseconds=next_run.microseconds) next_run = str(next_run) c_info = dict(index=i, command=sc.command['command'], interval=sc.command['interval'], next_run=next_run) if sc.command.get('skip', False): c_info['skip_next'] = True commands_info.append(c_info) asyncio.create_task(discord_service.get_service_manager().send_message( discord_service.Response( server_name, f'```{json.dumps(commands_info, indent=1)}```'))) if 'skip' in parsed_args: i = parsed_args.skip if not 0 <= i < len(scheduled_command.services.get( server_name, list())): asyncio.create_task( discord_service.get_service_manager().send_message( discord_service.Response(server_name, 'Invalid index'))) else: await scheduled_command.get_service_manager( server_name, i).send_message(scheduled_command.Skip(server_name)) if parsed_args.kill: sys.exit(0) if parsed_args.version: asyncio.create_task(discord_service.get_service_manager().send_message( discord_service.Response(server_name, f'{carim_discord_bot.VERSION}')))