import {
    Client,
    ColorResolvable,
    EmojiResolvable,
    Message,
    MessageButtonStyleResolvable,
    CommandInteraction,
    TextBasedChannel,
    GuildEmoji,
    GuildBan,
    GuildMember,
    Collection,
    Guild,
    Invite,
    Role,
    User,
    TextBasedChannels,
} from 'discord.js'

export declare class Modlogs {
    constructor(options?: ModlogsOptions);
  
    /**
     *
     * @param client Your bot instance
     * @param channel Changes in channel
     * @param options Valid options.
     */
    public ChannelCreate(
      client: Client,
      channel: TextBasedChannels,
      options?: {
        chid?: String;
      }
    ): Promise<void>;
    /**
     *
     * @param client Your bot instance
     * @param channel Changes in channel
     * @param time At what time changes occured
     * @param options Valid options.
     */
    public ChannelPinsUpdate(
      client: Client,
      channel: TextBasedChannels,
      time: Date,
      options?: {
        chid?: String;
      }
    ): Promise<void>;
    /**
     *
     * @param client Your bot instance
     * @param channel Changes in channel
     * @param options Valid options.
     */
    public ChannelDelte(
      client: Client,
      channel: TextBasedChannels,
      options?: {
        chid?: String;
      }
    ): Promise<void>;
    /**
     *
     * @param client Your bot instance
     * @param oldChannel Old channel
     * @param newChannel New channel
     * @param options Valid options.
     */
    public ChannelUpdate(
      client: Client,
      oldChannel: TextBasedChannels,
      newChannel: TextBasedChannels,
      options?: {
        chid?: String;
      }
    ): Promise<void>;
    /**
     *
     * @param client Your bot instance
     * @param emoji Emoji listner
     * @param options Valid options.
     */
    public EmojiDelte(
      client: Client,
      emoji: GuildEmoji,
      options?: {
        chid?: String;
      }
    ): Promise<void>;
    /**
     *
     * @param client Your bot instance
     * @param emoji Emoji listner
     * @param options Valid options.
     */
    public EmojiCreate(
      client: Client,
      emoji: GuildEmoji,
      options?: {
        chid?: String;
      }
    ): Promise<void>;
    /**
     *
     * @param client Your bot instance
     * @param oldEmoji Old Emoji
     * @param newEmoji New Emoji
     * @param options Valid options.
     */
    public EmojiUpdate(
      /**Your bot instance*/
      client: Client,
      oldEmoji: GuildEmoji,
      newEmoji: GuildEmoji,
      options?: {
        /**Valid channel id. */
        chid?: String;
      }
    ): Promise<void>;
    /**
     *
     * @param client Your bot instance.
     * @param ban Member banned listner.
     * @param options Valid options.
     */
    public GuildBanAdd(
      client: Client,
      ban: GuildBan,
      options?: {
        chid?: String;
      }
    ): Promise<void>;
    /**
     *
     * @param client Your bot instance.
     * @param ban Member banned listner.
     * @param options Valid options.
     */
    public GuildBanRemove(
      client: Client,
      ban: GuildBan,
      options?: {
        chid?: String;
      }
    ): Promise<void>;
    /**
     *
     * @param client Your bot instance.
     * @param member Member joined listner.
     * @param options Valid options.
     */
    public GuildMemberAdd(
      client: Client,
      member: GuildMember,
      options?: {
        chid?: String;
      }
    ): Promise<void>;
    /**
     *
     * @param client Your bot instance.
     * @param member Mad number of members joining. Basically a raid.
     * @param options Valid options.
     */
    public GuildMemberCunck(
      client: Client,
      members: Collection<string, GuildMember>,
      guild: Guild,
      options?: {
        chid?: String;
      }
    ): Promise<void>;
    /**
     *
     * @param client Your bot instance.
     * @param member Member removed listner.
     * @param options Valid options.
     */
    public GuildMemberRemove(
      client: Client,
      member: GuildMember,
      options?: {
        chid?: String;
      }
    ): Promise<void>;
    /**
     *
     * @param client Your bot instance
     * @param oldMember Old Member
     * @param newMember New Member
     * @param options Valid options.
     */
    public GuildMemberUpdate(
      client: Client,
      oldMember: GuildMember,
      newMember: GuildMember,
      options?: {
        chid?: String;
      }
    ): Promise<void>;
    /**
     *
     * @param client Your bot instance
     * @param invite Invite listner
     * @param options Valid options.
     */
    public InviteCreate(
      client: Client,
      invite: Invite,
      options?: {
        chid?: String;
      }
    ): Promise<void>;
    /**
     *
     * @param client Your bot instance
     * @param invite Invite listner
     * @param options Valid options.
     */
    public InviteDelte(
      client: Client,
      invite: Invite,
      options?: {
        chid?: String;
      }
    ): Promise<void>;
    /**
     *
     * @param client Your bot instance
     * @param message Message listner
     * @param options Valid options.
     */
    public MessageDelte(
      client: Client,
      message: Message,
      options?: {
        chid?: String;
      }
    ): Promise<void>;
    /**
     *
     * @param client Your bot instance
     * @param oldMessage Old Message
     * @param newMessage New Message
     * @param options Valid options.
     */
    public MessageUpdate(
      client: Client,
      oldMessage: Message,
      newMessage: Message,
      options?: {
        chid?: String;
      }
    ): Promise<void>;
    /**
     *
     * @param client Your bot instance
     * @param role Role listner
     * @param options Valid options.
     */
    public RoleCreate(
      client: Client,
      role: Role,
      options?: {
        chid?: String;
      }
    ): Promise<void>;
    /**
     *
     * @param client Your bot instance
     * @param role Role listner
     * @param options Valid options.
     */
    public RoleDelte(
      client: Client,
      role: Role,
      options?: {
        chid?: String;
      }
    ): Promise<void>;
    /**
     *
     * @param client Your bot instance
     * @param oldRole Old Role
     * @param newRole New Role
     * @param options Valid options.
     */
    public RoleUpdate(
      client: Client,
      oldRole: Role,
      newRole: Role,
      options?: {
        chid?: String;
      }
    ): Promise<void>;
  }
interface ModlogsOptions {
    chid: String;
  }