예제 #1
0
async def on_message_edit(_, message):
    for role in message.role_mentions:
        if role.id == "239175340180635649":  # ex support role
            return

    if not message.content.startswith(">>"):
        return

    arg_string = message.content[2:].split("\n", 1)[0]
    try:
        args = parser.parse_args(shlex.split(arg_string))
    except (argparse.ArgumentError, HelpException) as e:
        return await private_msg_code(message, str(e))

    return await dispatcher.handle(args.command, client, message, args)
예제 #2
0
async def on_message(message):
    for role in message.role_mentions:
        if role.id == "239175340180635649":  # ex support role
            return

    if message.server is not None:
        server_id = message.server.id
        server_name = message.server.name
    else:
        server_id = "0"
        server_name = "Private Message"

    if message.content.startswith(">>"):
        today = datetime.datetime.today().strftime("%a %d %b %H:%M:%S")
        logging.info("Date: {} User: {} Server: {} Command {} ".format(
            today, message.author, server_name, message.content[:50]))

    # TODO Deduplicate messages (or try to)
    # if not message.author.id == "292646750743691266":
    #     if not message.content.startswith(">>"):
    #         message_content = message.content
    #         second_mes = await client.wait_for_message(author=message.author, timeout=10, content=message_content)
    #         try:
    #             if second_mes.attachments:
    #                 second_mes = None
    #         except AttributeError:
    #             return
    #         if second_mes:
    #             await client.delete_message(second_mes)

    if server_id == "221919789017202688":  # eX Server
        if message.channel.id == "338273467483029515":  # welcome
            if message.author.id != client.user.id:  # own bot
                await delete_user_message(message)

    if not message.content.startswith(">>"):
        return

    arg_string = message.content[2:].split("\n", 1)[0]
    try:
        args = parser.parse_args(shlex.split(arg_string))
    except (argparse.ArgumentError, HelpException) as e:
        await delete_user_message(message)
        return await private_msg_code(message, str(e))

    return await dispatcher.handle(args.command, client, message, args)
예제 #3
0
async def handle_commands(message: discord.Message):
    is_guild = isinstance(message.channel, discord.abc.GuildChannel)
    if message.author.id == client.user.id:  # own bot
        return

    if message.author.id in prison_inmates:  # user in prison are not allowed to use any command
        return

    if is_guild and message.guild.id == EX_SERVER:
        if message.channel.id == EX_WELCOME_CHANNEL:
            await delete_user_message(message)  # no return here

    # prevent forwarding '>>' messages
    if not message.content.startswith(">>") or len(
            message.content) == 2:  # prevent forwarding '>>' messages
        return

    args_string = message.clean_content[2:]
    if not is_guild and args_string.split(" ")[0] not in [
            "getnative", "grain", "help"
    ]:
        return await message.author.send(
            "This command is not allowed in private chat, sorry :(")

    if is_guild:
        today = datetime.datetime.today().strftime("%a %d %b %H:%M:%S")
        logging.info(
            f"Date: {today} User: {message.author} Server: {message.guild.name} "
            f"Channel: {message.channel.name} Command: {message.content[:50]}")

    arg_list = shlex.split(args_string)
    try:
        args = parser.parse_args(arg_list)
    except ValueError as err:
        return await private_msg(message, f"```\n{err}```")
    except HelpException as err:
        await delete_user_message(message)
        return await private_msg(message, f"```\n{err}```")
    except (UnkownCommandException, argparse.ArgumentError) as err:
        if arg_list[0] not in dispatcher.commands:
            return  # not a valid command, so just ignore it
        return await private_msg(message, f"```\n{err}```")

    return await dispatcher.handle(args.command, client, message, args)
예제 #4
0
async def on_message(message):
    for role in message.role_mentions:
        if role.id == "239175340180635649":  # ex support role
            return

    if message.server is not None:
        server_id = message.server.id
        server_name = message.server.name
    else:
        server_id = "0"
        server_name = "Private Message"

    if server_id == "221919789017202688":  # eX Server
        if message.channel.id == "338273467483029515":  # welcome
            if message.author.id != client.user.id:  # own bot
                await delete_user_message(message)

    if not message.content.startswith(">>"):
        return

    if message.content.startswith(">>"):
        today = datetime.datetime.today().strftime("%a %d %b %H:%M:%S")
        logging.info(
            f"Date: {today} User: {message.author} Server: {server_name} Channel: {message.channel.name} "
            f"Command: {message.content[:50]}")

    arg_string = message.content[2:].split("\n", 1)[0]
    arg_string = shlex.split(arg_string)
    try:
        args = parser.parse_args(arg_string)
    except HelpException as err:
        await delete_user_message(message)
        return await private_msg_code(message, str(err))
    except (UnkownCommandException, argparse.ArgumentError) as err:
        if arg_string[0] in dispatcher.commands:
            await delete_user_message(message)
            return await private_msg_code(message, str(err))
        return

    return await dispatcher.handle(args.command, client, message, args)
예제 #5
0
async def handle_commands(message):
    if isinstance(message.channel, discord.abc.GuildChannel):
        server_name = message.guild.name
        channel_name = message.channel.name
    else:
        server_name = "Private Message"
        channel_name = None

    if not message.content.startswith(">>"):
        return

    if len(message.content) == 2:
        return

    today = datetime.datetime.today().strftime("%a %d %b %H:%M:%S")
    logging.info(
        f"Date: {today} User: {message.author} Server: {server_name} Channel: {channel_name} "
        f"Command: {message.content[:50]}")

    arg_string = message.clean_content[2:]
    try:
        arg_string = shlex.split(arg_string)
    except ValueError as err:
        return await send_message(message.author, f"```{str(err)}```")

    try:
        args = parser.parse_args(arg_string)
    except HelpException as err:
        return await send_message(message.author, f"```{str(err)}```")
    except (UnkownCommandException, argparse.ArgumentError) as err:
        if arg_string[0] == "spoiler":
            await delete_message(message)
        if arg_string[0] in dispatcher.commands:
            return await send_message(message.author, f"```{str(err)}```")
        return

    return await dispatcher.handle(args.command, client, message, args)