zlapi


Namezlapi JSON
Version 1.0.3 PyPI version JSON
download
home_pageNone
Summaryzlapi: Zalo API for Python
upload_time2024-11-23 00:40:44
maintainerNone
docs_urlNone
authorLê Quốc Việt (Vexx)
requires_pythonNone
licenseNone
keywords python zalo api zalo api zalo chat requests
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ![Logo](https://i.imgur.com/CMnA5Sh.jpeg "Logo")

## ``zlapi`` - Zalo API (Unofficial) for Python

[![Project version](https://img.shields.io/badge/pypi-v1.0.2-blue.svg "Project version")](https://pypi.org/project/zlapi/1.0.2)
[![Supported python versions: >= 3. and pypy](https://badgen.net/badge/python/>=3.,pypy?list=| "Supported python versions: >= 3. and pypy")](zlapi)
[![License: MIT License](https://img.shields.io/badge/license-MIT-lightgreen.svg "License: MIT License")](https://github.com/Its-VrxxDev/zlapi/blob/master/LICENSE)
[![Documentation](https://img.shields.io/badge/docs-stop_updating-red.svg "Documentation")](https://vrxx1337.vercel.app/zlapi/docs/lastest)

### Language

- Sẽ hỗ trợ tài liệu Tiếng Việt sớm nhất có thể. Sài tạm google dịch nhé :)

### What is ``zlapi``?

A powerful and efficient library to interact with Zalo Website. 
This is *not* an official API, Zalo has that [over here](https://developers.zalo.me/docs) for chat bots. This library differs by using a normal Zalo account instead (More flexible).

``zlapi`` currently support:

- Custom style for message.
- Sending many types of messages, with files, stickers, mentions, etc.
- Fetching messages, threads and users info.
- Creating groups, setting the group, creating polls, etc.
- Listening for, an reacting to messages and other events in real-time.
- And there are many other things.
- ``async``/``await`` (Updated).

Essentially, everything you need to make an amazing Zalo Bot!


### Caveats

``zlapi`` works by imitating what the browser does, and thereby tricking Zalo into thinking it's accessing the website normally.

However, there's a catch! **Using this library may not comply with Zalo's Terms Of Service**, so be! We are not responsible if your account gets banned or disabled!


### What's New?

This is an updated version for ``zlapi`` to improve features and fix bugs (v1.0.3)

**Improvements**

- Change function [replyMessage]()

**Bugfixes**

- Fixed not getting response from server when listening.

- Fixed the error of login function, not requiring account & password when using cookies.

**Deprecations**

- The old login server has been removed due to lack of funds to maintain the server.

</br>

## Installation

```bash
pip install zlapi
```

If you don't have [pip](https://pip.pypa.io/), [this guide](http://docs.python-guide.org/en/latest/starting/installation/) can guide you through the process.

You can also install directly from source, provided you have ``pip>=19.0``:

```bash
pip install git+https://github.com/Its-VrxxDev/zlapi.git
```

</br>

## How to get IMEI and Cookies?

### Download Extension

- [Click Here](https://drive.google.com/file/d/18_-8ruYOVa89JkHdr3muGj3kGWxwt6mc/view?usp=drive_link) to download the extension support getting IMEI & Cookies more conveniently.

### Extension Usage Tutorial

1. Enable the extension downloaded above.
2. Go to [https://chat.zalo.me](https://chat.zalo.me), Sign in to your account.
3. After successfully logging in, go back to extension and get IMEI, Cookies.

> [!TIP]
If you have opened the website ``chat.zalo.me`` but the extension does not have IMEI & Cookies, please click ``Refresh Page``.

#### Windows

[![](https://previews.jumpshare.com/thumb/815bc01b796dd6f1733c957c5af19493968eb06ccf48b6a5036cf7916c0a83965899fb056fe88c29f2bcb2f9f0f5ed5832801eede43aa22e94d5c7bc545ef9448bfbfd14044e807555841b406fdf069aa3acda441ff8675390fa0ff601ff0bcd)](https://jumpshare.com/embed/8SjFyd3EQlCMx1V7N1UQ)

</br>

#### Android

> - Use ``kiwibrowser`` instead of ``chrome`` to be able to use the extension.
> - If you are redirect when accessing ``https://chat.zalo.me``. [Watch this video](https://jumpshare.com/embed/l3LLjAWSAR8KQxvh9dzz)

[![](https://previews.jumpshare.com/thumb/815bc01b796dd6f1733c957c5af194938966297dbb29c75d038ac93e0691be4c741e5e2cbb689c41b8dfebde4ded3316844e23ec82425f377c248f1a57861470e76e9fe268bdf0803c7c14a61c9dc50769f92efb3803e5ae68c46d260d3407db)](https://jumpshare.com/embed/n56jtVQ7pwZDfR5ZtPft)

</br>

## Basic Usage

### Login Account Using Cookies

* ``Normal``/``Async`` code style

```py
# > Normal
# from zlapi import ZaloAPI

# > Async
# from zlapi.Async import ZaloAPI

from zlapi import ZaloAPI
from zlapi.models import *

imei = "<imei>"
cookies = {} # Cookies Dict
bot = ZaloAPI("<phone>", "<password>", imei=imei, session_cookies=cookies)
```

</br>

* ``Simple`` code style

```py
from zlapi.simple import ZaloAPI
from zlapi.models import *

imei = "<imei>"
cookies = {} # Cookies Dict
bot = ZaloAPI("</>", "</>", imei, cookies, prefix="<your bot prefix>")
```

</br>

### Listen Message, Event, ...

* You can enable thread mode for [On Message](#on-message) function (work with ``requests`` type) with ``thread=True``.

```py
bot.listen(thread=True)
```

* You can customize the reconnect time when listening is interrupted using ``reconnect=...``.

```py
bot.listen(reconnect=5)
```

</br>

* ``Normal``/``Async`` code style

```py
# > Normal
# from zlapi import ZaloAPI

# > Async
# from zlapi.Async import ZaloAPI

from zlapi import ZaloAPI
from zlapi.models import *

imei = "<imei>"
cookies = {} # Cookies Dict

bot = ZaloAPI("<phone>", "<password>", imei=imei, session_cookies=cookies)
# client.listen(type="...")
bot.listen()
```

</br>

* ``Simple`` code style

```py
from zlapi.simple import ZaloAPI
from zlapi.models import *

imei = "<imei>"
cookies = {} # Cookies Dict

bot = ZaloAPI("</>", "</>", imei, cookies, prefix="<your bot prefix>")
bot.listen()
```

</br>

### Custom On Message Function

``onMessage`` function will be called when receiving a message from ``listen`` function. **So we can handle that message here.**

* ``Normal`` code style

```py
from zlapi import ZaloAPI
from zlapi.models import *

imei = "<imei>"
cookies = {} # Cookies Dict

class CustomBot(ZaloAPI):
    def onMessage(self, mid, author_id, message, message_object, thread_id, thread_type):
        # Handle Message Here
        pass


bot = CustomBot("<phone>", "<password>", imei=imei, session_cookies=cookies)
bot.listen()
```

</br>

* ``Async`` code style

```py
from zlapi.Async import ZaloAPI
from zlapi.models import *

imei = "<imei>"
cookies = {} # Cookies Dict

class CustomBot(ZaloAPI):
    async def onMessage(self, mid, author_id, message, message_object, thread_id, thread_type):
        # Handle Message Here
        pass


bot = CustomBot("<phone>", "<password>", imei=imei, session_cookies=cookies)
bot.listen()
```

</br>

* ``Simple`` code style

```py
from zlapi.simple import ZaloAPI
from zlapi.models import *

imei = "<imei>"
cookies = {} # Cookies Dict
bot = ZaloAPI("</>", "</>", imei, cookies, prefix="<bot prefix>")


@bot.event
async def on_message(ctx):
    # Handle Message Here
    pass


bot.listen()
```

</br>

### Example Handle Message

<details>
<summary><b><i>Normal</b> code style</i></summary>

```py
from zlapi import ZaloAPI
from zlapi.models import *

imei = "<imei>"
cookies = {} # Cookies Dict

class CustomBot(ZaloAPI):
    def onMessage(self, mid, author_id, message, message_object, thread_id, thread_type):
        if not isinstance(message, str):
            return

        if message == ".hi":
            print(f"{author_id} sent message .hi")


bot = CustomBot("<phone>", "<password>", imei=imei, session_cookies=cookies)
bot.listen()
```

> - If the message is not ``string`` do not process this message.
> - If the message is ``.hi`` will print author id of message to terminal.

</br>

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

```py
from zlapi.Async import ZaloAPI
from zlapi.models import *

imei = "<imei>"
cookies = {} # Cookies Dict

class CustomBot(ZaloAPI):
    async def onMessage(self, mid, author_id, message, message_object, thread_id, thread_type):
        if not isinstance(message, str):
            return

        if message == ".hi":
            print(f"{author_id} sent message .hi")


bot = CustomBot("<phone>", "<password>", imei=imei, session_cookies=cookies)
bot.listen()
```

> - If the message is not ``string`` do not process this message.
> - If the message is ``.hi`` will print author id of message to terminal.

</br>

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Method 1

  ```py
  from zlapi.simple import ZaloAPI
  from zlapi.models import *

  imei = "<imei>"
  cookies = {} # Cookies Dict
  bot = ZaloAPI("</>", "</>", imei, cookies, prefix="<bot prefix>")

  
  @bot.event
  async def on_message(ctx):
      if ctx.message == ".hi":
          print(f"{ctx.author_id} sent message .hi")


  bot.listen()
  ```

</br>

- Method 2

  ```py
  from zlapi.simple import ZaloAPI
  from zlapi.models import *

  imei = "<imei>"
  cookies = {} # Cookies Dict
  bot = ZaloAPI("</>", "</>", imei, cookies, prefix=".")


  @bot.register_handler(commands=["hi"])
  async def handle_hi(ctx):
      print(f"{ctx.author_id} sent message .hi")

  
  bot.listen()
  ```
  
  > - ``@bot.register_handler(commands=["hi"])`` is a decoration class used to register a command. When an incoming message matches the bot prefix + registered commands, the message will be processed.

</details>

</br>

<!-- fetchAccountInfo -->

### Fetch Account Information

This function will get the account information you are using in ``zlapi``.

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.fetchAccountInfo()
  ```

</br>

- Inside Module Function

  ```py
  self.fetchAccountInfo()
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.fetchAccountInfo())
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.fetchAccountInfo()
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.fetch_account_info())
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.fetch_account_info()
  ```

</details>

<!-- END FetchAccountInfo -->

</br>

<!-- fetchPhoneNumber -->

### Fetch Phone Number

This function will get user information using that user phone number.

> [!NOTE]
Can't get information of **hidden phone number** or **locked account**

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.fetchPhoneNumber("<phone number>")
  ```

</br>

- Inside Module Function

  ```py
  self.fetchPhoneNumber("<phone number>")
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.fetchPhoneNumber("<phone number>"))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.fetchPhoneNumber("<phone number>")
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.fetch_phone_number("<phone number>"))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.fetch_phone_number("<phone number>")
  ```

</details>

<!-- END FetchPhoneNumber -->

</br>

<!-- fetchUserInfo -->

### Fetch User Info

This function will get user information using that user ID.

> - In ``Normal``/``Async`` code style you can get user id with author_id argument
> - In ``Simple`` code style you can get user id with ctx.author_id argument
> - Or you can use user id if you already have one

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.fetchUserInfo(<user id>)
  ```

</br>

- Inside Module Function

  ```py
  self.fetchUserInfo(<user id>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.fetchUserInfo(<user id>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.fetchUserInfo(<user id>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.fetch_user_info(<user id>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.fetch_user_info(<user id>)
  ```

</details>

<!-- END FetchUserInfo -->

</br>

<!-- fetchGroupInfo -->

### Fetch Group Info

This function will get group information using that group ID.

> - In ``Normal``/``Async`` code style you can get user id with thread_id argument
> - In ``Simple`` code style you can get user id with ctx.thread_id argument
> - Or you can use group id if you already have one

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.fetchGroupInfo(<group id>)
  ```

</br>

- Inside Module Function

  ```py
  self.fetchGroupInfo(<group id>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.fetchGroupInfo(<group id>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.fetchGroupInfo(<group id>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.fetch_group_info(<group id>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.fetch_group_info(<user id>)
  ```

</details>

<!-- END FetchGroupInfo -->

</br>

<!-- fetchAllFriends -->

### Fetch All Friends

This function will get all the friends information of the account currently using the ``zlapi``.

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.fetchAllFriends()
  ```

</br>

- Inside Module Function

  ```py
  self.fetchAllFriends()
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.fetchAllFriends())
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.fetchAllFriends()
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.fetch_all_friends())
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.fetch_all_friends()
  ```

</details>

<!-- END FetchAllFriends -->

</br>

<!-- fetchAllGroups -->

### Fetch All Groups

This function will get all the groups id of the account currently using the ``zlapi``.

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.fetchAllGroups()
  ```

</br>

- Inside Module Function

  ```py
  self.fetchAllGroups()
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.fetchAllGroups())
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.fetchAllGroups()
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.fetch_all_groups())
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.fetch_all_groups()
  ```

</details>

<!-- END FetchAllGroups -->

</br>

<!-- changeAccountSetting -->

### Change Account Setting

This function will change setting of the account currently using the ``zlapi``.

> - Args:
>    - name (str): The new account name
>    - dob (str): Date of birth wants to change (format: year-month-day)
>    - gender (int | str): Gender wants to change (0 = Male, 1 = Female)

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.changeAccountSetting(<name>, <dob>, <gender>)
  ```

</br>

- Inside Module Function

  ```py
  self.changeAccountSetting(<name>, <dob>, <gender>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.changeAccountSetting(<name>, <dob>, <gender>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.changeAccountSetting(<name>, <dob>, <gender>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.change_account_setting(<name>, <dob>, <gender>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.change_account_setting(<name>, <dob>, <gender>)
  ```

</details>

<!-- END changeAccountSetting -->

</br>

<!-- changeAccountAvatar -->

### Change Account Avatar

This function will upload/change avatar of the account currently using the ``zlapi``.

> - Args:
>    - filePath (str): A path to the image to upload/change avatar
>    - size (int): Avatar image size (default = auto)
>	- width (int): Width of avatar image
>	- height (int): height of avatar image
>	- language (int | str): Zalo Website language ? (idk)

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.changeAccountAvatar(<filePath>)
  ```

</br>

- Inside Module Function

  ```py
  self.changeAccountAvatar(<filePath>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.changeAccountAvatar(<filePath>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.changeAccountAvatar(<filePath>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.change_account_avatar(<filePath>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.change_account_avatar(<filePath>)
  ```

</details>

<!-- END changeAccountAvatar -->

</br>

<!-- sendFriendRequest -->

### Send Friend Request

This function will send friend request to a user by ID.

> - Args:
>	- userId (int | str): User ID to send friend request
>	- msg (str): Friend request message
>	- language (str): Response language or Zalo interface language

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.sendFriendRequest(<userId>, <msg>)
  ```

</br>

- Inside Module Function

  ```py
  self.sendFriendRequest(<userId>, <msg>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.sendFriendRequest(<userId>, <msg>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.sendFriendRequest(<userId>, <msg>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.send_friend_request(<userId>, <msg>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.send_friend_request(<userId>, <msg>)
  ```

</details>

<!-- END sendFriendRequest -->

</br>

<!-- acceptFriendRequest -->

### Accept Friend Request

This function will accept friend request from user by ID.

> - Args:
>	- userId (int | str): User ID to accept friend request
>	- language (str): Response language or Zalo interface language

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.acceptFriendRequest(<userId>)
  ```

</br>

- Inside Module Function

  ```py
  self.acceptFriendRequest(<userId>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.acceptFriendRequest(<userId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.acceptFriendRequest(<userId>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.accept_friend_request(<userId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.accept_friend_request(<userId>)
  ```

</details>

<!-- END acceptFriendRequest -->

</br>

<!-- blockViewFeed -->

### Block View Feed

This function will Block/Unblock friend view feed by ID.

> - Args:
>	- userId (int | str): User ID to block/unblock view feed
>	- isBlockFeed (int): Block/Unblock friend view feed (1 = True | 0 = False)

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.blockViewFeed(<userId>, <isBlockFeed>)
  ```

</br>

- Inside Module Function

  ```py
  self.blockViewFeed(<userId>, <isBlockFeed>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.blockViewFeed(<userId>, <isBlockFeed>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.blockViewFeed(<userId>, <isBlockFeed>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.block_view_feed(<userId>, <isBlockFeed>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.block_view_feed(<userId>, <isBlockFeed>)
  ```

</details>

<!-- END blockViewFeed -->

</br>

<!-- blockUser -->

### Block User

This function will block user by ID.

> - Args:
>	- userId (int | str): User ID to block

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.blockUser(<userId>)
  ```

</br>

- Inside Module Function

  ```py
  self.blockUser(<userId>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.blockUser(<userId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.blockUser(<userId>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.block_user(<userId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.block_user(<userId>)
  ```

</details>

<!-- END blockUser -->

</br>

<!-- unblockUser -->

### Unblock User

This function will unblock user by ID.

> - Args:
>	- userId (int | str): User ID to unblock

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.unblockUser(<userId>)
  ```

</br>

- Inside Module Function

  ```py
  self.unblockUser(<userId>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.unblockUser(<userId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.unblockUser(<userId>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.unblock_user(<userId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.unblock_user(<userId>)
  ```

</details>

<!-- END unblockUser -->

</br>

<!-- createGroup -->

### Create Group

This function will Create a new group.

> - Args:
>	- name (str): The new group name
>	- description (str): Description of the new group
>	- members (str | list): List/String member IDs add to new group
>	- nameChanged (int - auto): Will use default name if disabled (0), else (1)
>	- createLink (int - default): Create a group link? Default = 1 (True)
			

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.createGroup(<name>, <description>, <members>)
  ```

</br>

- Inside Module Function

  ```py
  self.createGroup(<name>, <description>, <members>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.createGroup(<name>, <description>, <members>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.createGroup(<name>, <description>, <members>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.create_group(<name>, <description>, <members>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.create_group(<name>, <description>, <members>)
  ```

</details>

<!-- END createGroup -->

</br>

<!-- changeGroupAvatar -->

### Change Group Avatar

This function will Upload/Change group avatar by ID.

> - Args:
>	- filePath (str): A path to the image to upload/change avatar
>	- groupId (int | str): Group ID to upload/change avatar

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.changeGroupAvatar(<filePath>, <groupId>)
  ```

</br>

- Inside Module Function

  ```py
  self.changeGroupAvatar(<filePath>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.changeGroupAvatar(<filePath>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.changeGroupAvatar(<filePath>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.change_group_avatar(<filePath>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.change_group_avatar(<filePath>, <groupId>)
  ```

</details>

> [!NOTE]
Client must be the Owner of the group
(If the group does not allow members to upload/change)

<!-- END changeGroupAvatar -->

</br>

<!-- changeGroupName -->

### Change Group Name

This function will Set/Change group name by ID.

> - Args:
>	- groupName (str): Group name to change
>	- groupId (int | str): Group ID to change name

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.changeGroupName(<groupName>, <groupId>)
  ```

</br>

- Inside Module Function

  ```py
  self.changeGroupName(<groupName>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.changeGroupName(<groupName>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.changeGroupName(<groupName>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.change_group_name(<groupName>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.change_group_name(<groupName>, <groupId>)
  ```

</details>

> [!NOTE]
Client must be the Owner of the group
(If the group does not allow members to upload/change)

<!-- END changeGroupName -->

</br>

<!-- changeGroupSetting -->

### Change Group Setting

This function will Update group settings by ID.

> - Args:
>	- groupId (int | str): Group ID to update settings
>	- defaultMode (str): Default mode of settings
>			
>		- default: Group default settings
>		- anti-raid: Group default settings for anti-raid
>			
>	- **kwargs: Group settings kwargs, Value: (1 = True, 0 = False)
>			
>		- blockName: Không cho phép user đổi tên & ảnh đại diện nhóm
>		- signAdminMsg: Đánh dấu tin nhắn từ chủ/phó nhóm
>		- addMemberOnly: Chỉ thêm members (Khi tắt link tham gia nhóm)
>		- setTopicOnly: Cho phép members ghim (tin nhắn, ghi chú, bình chọn)
>		- enableMsgHistory: Cho phép new members đọc tin nhắn gần nhất
>		- lockCreatePost: Không cho phép members tạo ghi chú, nhắc hẹn
>		- lockCreatePoll: Không cho phép members tạo bình chọn
>		- joinAppr: Chế độ phê duyệt thành viên
>		- bannFeature: Default (No description)
>		- dirtyMedia: Default (No description)
>		- banDuration: Default (No description)
>		- lockSendMsg: Không cho phép members gửi tin nhắn
>		- lockViewMember: Không cho phép members xem thành viên nhóm
>		- blocked_members: Danh sách members bị chặn

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.changeGroupSetting(<groupId>, **kwargs)
  ```

</br>

- Inside Module Function

  ```py
  self.changeGroupSetting(<groupId>, **kwargs)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.changeGroupSetting(<groupId>, **kwargs))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.changeGroupSetting(<groupId>, **kwargs)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.change_group_setting(<groupId>, **kwargs))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.change_group_setting(<groupId>, **kwargs)
  ```

</details>

> [!WARNING]
Other settings will default value if not set. See `defaultMode`

<!-- END changeGroupSetting -->

</br>

<!-- changeGroupOwner -->

### Change Group Owner

This function will Change group owner by ID.

> - Args:
>	- newAdminId (int | str): members ID to changer owner
>	- groupId (int | str): ID of the group to changer owner

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.changeGroupOwner(<newAdminId>, <groupId>)
  ```

</br>

- Inside Module Function

  ```py
  self.changeGroupOwner(<newAdminId>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.changeGroupOwner(<newAdminId>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.changeGroupOwner(<newAdminId>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.change_group_owner(<newAdminId>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.change_group_owner(<newAdminId>, <groupId>)
  ```

</details>

> [!NOTE]
Client must be the Owner of the group.

<!-- END changeGroupOwner -->

</br>

<!-- addUsersToGroup -->

### Add Users To Group

This function will Add friends/users to a group.

> - Args:
>	- user_ids (str | list): One or more friend/user IDs to add
>	- groupId (int | str): Group ID to add friend/user to

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.addUsersToGroup(<user_ids>, <groupId>)
  ```

</br>

- Inside Module Function

  ```py
  self.addUsersToGroup(<user_ids>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.addUsersToGroup(<user_ids>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.addUsersToGroup(<user_ids>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.add_users_to_group(<user_ids>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.add_users_to_group(<user_ids>, <groupId>)
  ```

</details>

<!-- END addUsersToGroup -->

</br>

<!-- kickUsersInGroup -->

### Kick Users In Group

This function will Kickout members in group by ID.

> - Args:
>	- members (str | list): One or More member IDs to kickout
>	- groupId (int | str): Group ID to kick member from

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.kickUsersInGroup(<members>, <groupId>)
  ```

</br>

- Inside Module Function

  ```py
  self.kickUsersInGroup(<members>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.kickUsersInGroup(<members>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.kickUsersInGroup(<members>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.kick_users_in_group(<members>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.kick_users_in_group(<members>, <groupId>)
  ```

</details>

> [!NOTE]
Client must be the Owner of the group.

<!-- END kickUsersInGroup -->

</br>

<!-- blockUsersInGroup -->

### Block Users In Group

This function will Blocked members in group by ID.

> - Args:
>	- members (str | list): One or More member IDs to block
>	- groupId (int | str): Group ID to block member from

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.blockUsersInGroup(<members>, <groupId>)
  ```

</br>

- Inside Module Function

  ```py
  self.blockUsersInGroup(<members>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.blockUsersInGroup(<members>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.blockUsersInGroup(<members>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.block_users_in_group(<members>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.block_users_in_group(<members>, <groupId>)
  ```

</details>

> [!NOTE]
Client must be the Owner of the group.

<!-- END blockUsersInGroup -->

</br>

<!-- unblockUsersInGroup -->

### Unblock Users In Group

This function will Unblock members in group by ID.

> - Args:
>	- members (str | list): One or More member IDs to unblock
>	- groupId (int | str): Group ID to unblock member from

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.unblockUsersInGroup(<members>, <groupId>)
  ```

</br>

- Inside Module Function

  ```py
  self.unblockUsersInGroup(<members>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.unblockUsersInGroup(<members>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.unblockUsersInGroup(<members>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.unblock_users_in_group(<members>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.unblock_users_in_group(<members>, <groupId>)
  ```

</details>

> [!NOTE]
Client must be the Owner of the group.

<!-- END unblockUsersInGroup -->

</br>

<!-- addGroupAdmins -->

### Add Group Admins

This function will Add admins to the group by ID.

> - Args:
>	- members (str | list): One or More member IDs to add
>	- groupId (int | str): Group ID to add admins

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.addGroupAdmins(<members>, <groupId>)
  ```

</br>

- Inside Module Function

  ```py
  self.addGroupAdmins(<members>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.addGroupAdmins(<members>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.addGroupAdmins(<members>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.add_group_admins(<members>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.add_group_admins(<members>, <groupId>)
  ```

</details>

> [!NOTE]
Client must be the Owner of the group.

<!-- END addGroupAdmins -->

</br>

<!-- removeGroupAdmins -->

### Remove Group Admins

This function will Remove admins in the group by ID.

> - Args:
>	- members (str | list): One or More admin IDs to remove
>	- groupId (int | str): Group ID to remove admins

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.removeGroupAdmins(<members>, <groupId>)
  ```

</br>

- Inside Module Function

  ```py
  self.removeGroupAdmins(<members>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.removeGroupAdmins(<members>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.removeGroupAdmins(<members>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.remove_group_admins(<members>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.remove_group_admins(<members>, <groupId>)
  ```

</details>

> [!NOTE]
Client must be the Owner of the group.

<!-- END removeGroupAdmins -->

</br>

<!-- pinGroupMsg -->

### Pin Group Message

This function will Pin message in group by ID.

> - Args:
>	- pinMsg (Message): Message Object to pin
>	- groupId (int | str): Group ID to pin message

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.pinGroupMsg(<pinMsg>, <groupId>)
  ```

</br>

- Inside Module Function

  ```py
  self.pinGroupMsg(<pinMsg>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.pinGroupMsg(<pinMsg>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.pinGroupMsg(<pinMsg>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.pin_group_msg(<pinMsg>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.pin_group_msg(<pinMsg>, <groupId>)
  ```

</details>

<!-- END pinGroupMsg -->

</br>

<!-- unpinGroupMsg -->

### Unpin Group Message

This function will Unpin message in group by ID.

> - Args:
>	- pinId (int | str): Pin ID to unpin
>	- pinTime (int): Pin start time
>	- groupId (int | str): Group ID to unpin message

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.unpinGroupMsg(<pinId>, <pinTime>, <groupId>)
  ```

</br>

- Inside Module Function

  ```py
  self.unpinGroupMsg(<pinId>, <pinTime>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.unpinGroupMsg(<pinId>, <pinTime>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.unpinGroupMsg(<pinId>, <pinTime>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.unpin_group_msg(<pinId>, <pinTime>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.unpin_group_msg(<pinId>, <pinTime>, <groupId>)
  ```

</details>

<!-- END unpinGroupMsg -->

</br>

<!-- deleteGroupMsg -->

### Delete Group Message

This function will Delete message in group by ID.

> - Args:
>	- msgId (int | str): Message ID to delete
>	- ownerId (int | str): Owner ID of the message to delete
>	- clientMsgId (int | str): Client message ID to delete message
>	- groupId (int | str): Group ID to delete message

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.deleteGroupMsg(<msgId>, <onwerId>, <clientMsgId>, <groupId>)
  ```

</br>

- Inside Module Function

  ```py
  self.deleteGroupMsg(<msgId>, <onwerId>, <clientMsgId>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.deleteGroupMsg(<msgId>, <onwerId>, <clientMsgId>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.deleteGroupMsg(<msgId>, <onwerId>, <clientMsgId>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.delete_group_msg(<msgId>, <onwerId>, <clientMsgId>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.delete_group_msg(<msgId>, <onwerId>, <clientMsgId>, <groupId>)
  ```

</details>

<!-- END deleteGroupMsg -->

</br>

<!-- viewGroupPending -->

### View Group Pending

This function will Give list of people pending approval in group by ID.

> - Args:
>	- groupId (int | str): Group ID to view pending members

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.viewGroupPending(<groupId>)
  ```

</br>

- Inside Module Function

  ```py
  self.viewGroupPending(<groupId>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.viewGroupPending(<groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.viewGroupPending(<groupId>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.view_group_pending(<groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.view_group_pending(<groupId>)
  ```

</details>

<!-- END viewGroupPending -->

</br>

<!-- handleGroupPending -->

### Handle Group Pending

This function will Approve/Deny pending users to the group from the group's approval.

> - Args:
>	- members (str | list): One or More member IDs to handle
>	- groupId (int | str): ID of the group to handle pending members
>	- isApprove (bool): Approve/Reject pending members (True | False)

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.handleGroupPending(<members>, <groupId>)
  ```

</br>

- Inside Module Function

  ```py
  self.handleGroupPending(<members>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.handleGroupPending(<members>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.handleGroupPending(<members>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.handle_group_pending(<members>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.handle_group_pending(<members>, <groupId>)
  ```

</details>

<!-- END handleGroupPending -->

</br>

<!-- viewPollDetail -->

### View Poll Detail

This function will Give poll data by ID.

> - Args:
>	- pollId (int | str): Poll ID to view detail

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.viewPollDetail(<pollId>)
  ```

</br>

- Inside Module Function

  ```py
  self.viewPollDetail(<pollId>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.viewPollDetail(<pollId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.viewPollDetail(<pollId>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.view_poll_detail(<pollId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.view_poll_detail(<pollId>)
  ```

</details>

<!-- END viewPollDetail -->

</br>

<!-- createPoll -->

### Create Poll

This function will Create poll in group by ID.

> - Args:
>	- question (str): Question for poll
>	- options (str | list): List options for poll
>	- groupId (int | str): Group ID to create poll from
>	- expiredTime (int): Poll expiration time (0 = no expiration)
>	- pinAct (bool): Pin action (pin poll)
>	- multiChoices (bool): Allows multiple poll choices
>	- allowAddNewOption (bool): Allow members to add new options
>	- hideVotePreview (bool): Hide voting results when haven't voted
>	- isAnonymous (bool): Hide poll voters
			

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.createPoll(<question>, <options>, <groupId>)
  ```

</br>

- Inside Module Function

  ```py
  self.createPoll(<question>, <options>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.createPoll(<question>, <options>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.createPoll(<question>, <options>, <groupId>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.create_poll(<question>, <options>, <groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.create_poll(<question>, <options>, <groupId>)
  ```

</details>

<!-- END createPoll -->

</br>

<!-- lockPoll -->

### Lock Poll

This function will Lock/end poll by ID.

> - Args:
>	- pollId (int | str): Poll ID to lock

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.lockPoll(<pollId>)
  ```

</br>

- Inside Module Function

  ```py
  self.lockPoll(<pollId>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.lockPoll(<pollId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.lockPoll(<pollId>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.lock_poll(<pollId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.lock_poll(<pollId>)
  ```

</details>

<!-- END lockPoll -->

</br>

<!-- disperseGroup -->

### Disperse Group

This function will Disperse group by ID.

> - Args:
>	- groupId (int | str): Group ID to disperse

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.disperseGroup(<groupId>)
  ```

</br>

- Inside Module Function

  ```py
  self.disperseGroup(<groupId>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.disperseGroup(<groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.disperseGroup(<groupId>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.disperse_group(<groupId>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.disperse_group(<groupId>)
  ```

</details>

<!-- END disperseGroup -->

</br>

<!-- send/sendMessage -->

### Send Message

This function will Send message to a thread (user/group).

> - Args:
>	- message (Message): ``Message`` Object to send
>	- thread_id (int | str): User/Group ID to send to
>	- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``
>	- mark_message (str): Send messages as `Urgent` or `Important` mark

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function
  
  ```py
  bot.send(<message>, <thread_id>, <thread_type>)
  ```
  
  or
  
  ```py
  bot.sendMessage(<message>, <thread_id>, <thread_type>)
  ```

</br>

- Inside Module Function

  ```py
  self.send(<message>, <thread_id>, <thread_type>)
  ```
  
  or
  
  ```py
  self.sendMessage(<message>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.send(<message>, <thread_id>, <thread_type>))
  ```
  
  or
  
  ```py
  asyncio.run(bot.sendMessage(<message>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.send(<message>, <thread_id>, <thread_type>)
  ```
  
  or
  
  ```py
  await self.sendMessage(<message>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.send(<message>, <thread_id>, <thread_type>))
  ```
  
  or
  
  ```py
  asyncio.run(bot.send_message(<message>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.send(<message>, <thread_id>, <thread_type>)
  ```
  
  or
  
  ```py
  await bot.send_message(<message>, <thread_id>, <thread_type>)
  ```

</details>

<!-- END send/sendMessage -->

</br>

<!-- replyMessage -->

### Reply Message

This function will Reply message in thread (user/group).

> - Args:
>	- replyMsg (Message): ``Message Object`` to reply
>	- message (Message): ``Message Object`` to send
>	- thread_id (int | str): User/Group ID to send to.
>	- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.replyTo(<replyMsg>, <message>, <thread_id>, <thread_type>)
  ```

</br>

- Inside Module Function

  ```py
  self.replyTo(<replyMsg>, <message>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.replyTo(<replyMsg>, <message>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.replyTo(<replyMsg>, <message>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.reply_to(<replyMsg>, <message>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.reply_to(<replyMsg>, <message>, <thread_id>, <thread_type>)
  ```

</details>

<!-- END replyMessage -->

</br>

<!-- undoMessage -->

### Undo Message

This function will Undo message from the client (self) by ID.

> - Args:
>	- msgId (int | str): Message ID to undo
>	- cliMsgId (int | str): Client Msg ID to undo
>	- thread_id (int | str): User/Group ID to undo message
>	- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``
			
<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.undoMessage(<msgId>, <cliMsgId>, <thread_id>, <thread_type>)
  ```

</br>

- Inside Module Function

  ```py
  self.undoMessage(<msgId>, <cliMsgId>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.undoMessage(<msgId>, <cliMsgId>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.undoMessage(<msgId>, <cliMsgId>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.undo_message(<msgId>, <cliMsgId>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.undo_message(<msgId>, <cliMsgId>, <thread_id>, <thread_type>)
  ```

</details>

<!-- END undoMessage -->

</br>

<!-- sendReaction -->

### Send Reaction

This function will Reaction message in thread (user/group) by ID.

> - Args:
>	- messageObject (Message): ``Message Object`` to reaction
>	- reactionIcon (str): Icon/Text to reaction
>	- thread_id (int | str): Group/User ID contain message to reaction
>	- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.sendReaction(<messageObject>, <reactionIcon>, <thread_id>, <thread_type>)
  ```

</br>

- Inside Module Function

  ```py
  self.sendReaction(<messageObject>, <reactionIcon>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.sendReaction(<messageObject>, <reactionIcon>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.sendReaction(<messageObject>, <reactionIcon>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.send_reaction(<messageObject>, <reactionIcon>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.send_reaction(<messageObject>, <reactionIcon>, <thread_id>, <thread_type>)
  ```

</details>

<!-- END sendReaction -->

</br>

<!-- sendMultiReaction -->

### Send Multiple Reactions

This function will Reaction multi message in thread (user/group) by ID.

> - Args:
>	- reactionObj (MessageReaction): Message(s) data to reaction
>	- reactionIcon (str): Icon/Text to reaction
>	- thread_id (int | str): Group/User ID contain message to reaction
>	- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.sendMultiReaction(<reactionObj>, <reactionIcon>, <thread_id>, <thread_type>)
  ```

</br>

- Inside Module Function

  ```py
  self.sendMultiReaction(<reactionObj>, <reactionIcon>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.sendMultiReaction(<reactionObj>, <reactionIcon>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.sendMultiReaction(<reactionObj>, <reactionIcon>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.send_multi_reaction(<reactionObj>, <reactionIcon>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.send_multi_reaction(<reactionObj>, <reactionIcon>, <thread_id>, <thread_type>)
  ```

</details>

<!-- END sendMultiReaction -->

</br>

<!-- sendRemoteFile -->

### Send Remote File

This function will Send File to a User/Group with url.

> - Args:
>	- fileUrl (str): File url to send
>	- thread_id (int | str): User/Group ID to send to.
>	- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``
>	- fileName (str): File name to send
>	- fileSize (int): File size to send
>	- extension (str): type of file to send (py, txt, mp4, ...)

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.sendRemoteFile(<fileUrl>, <thread_id>, <thread_type>)
  ```

</br>

- Inside Module Function

  ```py
  self.sendRemoteFile(<fileUrl>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.sendRemoteFile(<fileUrl>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.sendRemoteFile(<fileUrl>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.send_remote_file(<fileUrl>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.send_remote_file(<fileUrl>, <thread_id>, <thread_type>)
  ```

</details>

<!-- END sendRemoteFile -->

</br>

<!-- sendRemoteVideo -->

### Send Remote Video

This function will Send video to a User/Group with url.

> - Args:
>	- videoUrl (str): Video link to send
>	- thumbnailUrl (str): Thumbnail link for video
>	- duration (int | str): Time for video (ms)
>	- thread_id (int | str): User/Group ID to send to.
>	- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``
>	- width (int): Width of the video
>	- height (int): Height of the video
>	- message (Message): ``Message Object`` to send with video

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.sendRemoteVideo(<videoUrl>, <thumbnailUrl>, <duration>, <thread_id>, <thread_type>)
  ```

</br>

- Inside Module Function

  ```py
  self.sendRemoteVideo(<videoUrl>, <thumbnailUrl>, <duration>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.sendRemoteVideo(<videoUrl>, <thumbnailUrl>, <duration>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.sendRemoteVideo(<videoUrl>, <thumbnailUrl>, <duration>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.send_remote_video(<videoUrl>, <thumbnailUrl>, <duration>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.send_remote_video(<videoUrl>, <thumbnailUrl>, <duration>, <thread_id>, <thread_type>)
  ```

</details>

<!-- END sendRemoteVideo -->

</br>

<!-- sendRemoteVoice -->

### Send Remote Voice

This function will Send voice to a User/Group with url.

> - Args:
>	- voiceUrl (str): Voice link to send
>	- thread_id (int | str): User/Group ID to change status in
>	- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``
>	- fileSize (int | str): Voice content length (size) to send

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.sendRemoteVoice(<voiceUrl>, <thread_id>, <thread_type>)
  ```

</br>

- Inside Module Function

  ```py
  self.sendRemoteVoice(<voiceUrl>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.sendRemoteVoice(<voiceUrl>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.sendRemoteVoice(<voiceUrl>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.send_remote_voice(<voiceUrl>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.send_remote_voice(<voiceUrl>, <thread_id>, <thread_type>)
  ```

</details>

<!-- END sendRemoteVoice -->

</br>

<!-- sendLocalImage -->

### Send Local Image

This function will Send Image to a User/Group with local file.

> - Args:
>	- imagePath (str): Image directory to send
>	- thread_id (int | str): User/Group ID to send to.
>	- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``
>	- width (int): Image width to send
>	- height (int): Image height to send
>	- message (Message): ``Message Object`` to send with image

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.sendLocalImage(<imagePath>, <thread_id>, <thread_type>)
  ```

</br>

- Inside Module Function

  ```py
  self.sendLocalImage(<imagePath>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.sendLocalImage(<imagePath>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.sendLocalImage(<imagePath>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.send_local_image(<imagePath>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.send_local_image(<imagePath>, <thread_id>, <thread_type>)
  ```

</details>

<!-- END sendLocalImage -->

</br>

<!-- sendMultiLocalImage -->

### Send Multiple Local Image

This function will Send Multiple Image to a User/Group with local file.

> - Args:
>	- imagePathList (list): List image directory to send
>	- thread_id (int | str): User/Group ID to send to.
>	- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``
>	- width (int): Image width to send
>	- height (int): Image height to send
>	- message (Message): ``Message Object`` to send with image

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.sendMultiLocalImage(<imagePathList>, <thread_id>, <thread_type>)
  ```

</br>

- Inside Module Function

  ```py
  self.sendMultiLocalImage(<imagePathList>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.sendMultiLocalImage(<imagePathList>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.sendMultiLocalImage(<imagePathList>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.send_multi_local_image(<imagePathList>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.send_multi_local_image(<imagePathList>, <thread_id>, <thread_type>)
  ```

</details>

<!-- END sendMultiLocalImage -->

</br>

<!-- sendLocalGif -->

### Send Local Gif

This function will Send Gif to a User/Group with local file.

> - Args:
>	- gifPath (str): Gif path to send
>	- thumbnailUrl (str): Thumbnail of gif to send
>	- thread_id (int | str): User/Group ID to send to.
>	- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``
>	- gifName (str): Gif name to send
>	- width (int): Gif width to send
>	- height (int): Gif height to send

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.sendLocalGif(<gifPath>, <thumbnailUrl>, <thread_id>, <thread_type>)
  ```

</br>

- Inside Module Function

  ```py
  self.sendLocalGif(<gifPath>, <thumbnailUrl>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.sendLocalGif(<gifPath>, <thumbnailUrl>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.sendLocalGif(<gifPath>, <thumbnailUrl>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.send_local_gif(<gifPath>, <thumbnailUrl>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.send_local_gif(<gifPath>, <thumbnailUrl>, <thread_id>, <thread_type>)
  ```

</details>

<!-- END sendLocalGif -->

</br>

<!-- sendSticker -->

### Send Sticker

This function will Send Sticker to a User/Group.

> - Args:
>	- stickerType (int | str): Sticker type to send
>	- stickerId (int | str): Sticker id to send
>	- cateId (int | str): Sticker category id to send
>	- thread_id (int | str): User/Group ID to send to.
>	- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.sendSticker(<stickerType>, <stickerId>, <cateId>, <thread_id>, <thread_type>)
  ```

</br>

- Inside Module Function

  ```py
  self.sendSticker(<stickerType>, <stickerId>, <cateId>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.sendSticker(<stickerType>, <stickerId>, <cateId>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.sendSticker(<stickerType>, <stickerId>, <cateId>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.send_sticker(<stickerType>, <stickerId>, <cateId>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.send_sticker(<stickerType>, <stickerId>, <cateId>, <thread_id>, <thread_type>)
  ```

</details>

<!-- END sendSticker -->

</br>

<!-- sendCustomSticker -->

### Send Custom Sticker

This function will Send custom (static/animation) sticker to a User/Group with url.

> - Args:
>	- staticImgUrl (str): Image url (png, jpg, jpeg) format to create sticker
>	- animationImgUrl (str): Static/Animation image url (webp) format to create sticker
>	- thread_id (int | str): User/Group ID to send sticker to.
>	- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``
>	- reply (int | str): Message ID to send stickers with quote
>	- width (int | str): Width of photo/sticker
>	- height (int | str): Height of photo/sticker

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.sendCustomSticker(<staticImgUrl>, <animationImgUrl>, <thread_id>, <thread_type>)
  ```

</br>

- Inside Module Function

  ```py
  self.sendCustomSticker(<staticImgUrl>, <animationImgUrl>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.sendCustomSticker(<staticImgUrl>, <animationImgUrl>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.sendCustomSticker(<staticImgUrl>, <animationImgUrl>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.send_custom_sticker(<staticImgUrl>, <animationImgUrl>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.send_custom_sticker(<staticImgUrl>, <animationImgUrl>, <thread_id>, <thread_type>)
  ```

</details>

<!-- END sendCustomSticker -->

</br>

<!-- sendLink -->

### Send Link

This function will Send link to a User/Group with url.

> - Args:
>	- linkUrl (str): Link url to send
>	- title (str): Title for card to send
>	- thread_id (int | str): User/Group ID to send link to
>	- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``
>	- thumbnailUrl (str): Thumbnail link url for card to send
>	- domainUrl (str): Main domain of Link to send (eg: github.com)
>	- desc (str): Description for card to send
>	- message (Message): ``Message Object`` to send with the link

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.sendLink(<linkUrl>, <title>, <thread_id>, <thread_type>)
  ```

</br>

- Inside Module Function

  ```py
  self.sendLink(<linkUrl>, <title>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.sendLink(<linkUrl>, <title>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.sendLink(<linkUrl>, <title>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.send_link(<linkUrl>, <title>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.send_link(<linkUrl>, <title>, <thread_id>, <thread_type>)
  ```

</details>

<!-- END sendLink -->

</br>

<!-- sendReport -->

### Send Report

This function will Send report to Zalo.

> - Args:
>	- thread_id (int | str): User/Group ID to report
>	- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``
>	- reason (int): Reason for reporting
>			
>		- 1 = Nội dung nhạy cảm
>		- 2 = Làm phiền
>		- 3 = Lừa đảo
>		- 0 = custom
>			
>	- content (str): Report content (work if reason = custom)

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.sendReport(<thread_id>, <thread_type>)
  ```

</br>

- Inside Module Function

  ```py
  self.sendReport(<thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.sendReport(<thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.sendReport(<thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.send_report(<thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.send_report(<thread_id>, <thread_type>)
  ```

</details>

<!-- END sendReport -->

</br>

<!-- sendBusinessCard -->

### Send Business Card

This function will Send business card to thread (user/group) by user ID.

> - Args:
>	- userId (int | str): Business card user ID
>	- qrCodeUrl (str): QR Code link with business card profile information
>	- thread_id (int | str): User/Group ID to change status in
>	- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``
>	- phone (int | str): Send business card with phone number

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.sendBusinessCard(<userId>, <qrCodeUrl>, <thread_id>, <thread_type>)
  ```

</br>

- Inside Module Function

  ```py
  self.sendBusinessCard(<userId>, <qrCodeUrl>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.sendBusinessCard(<userId>, <qrCodeUrl>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.sendBusinessCard(<userId>, <qrCodeUrl>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.send_business_card(<userId>, <qrCodeUrl>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.send_business_card(<userId>, <qrCodeUrl>, <thread_id>, <thread_type>)
  ```

</details>

<!-- END sendBusinessCard -->

</br>

<!-- setTypingStatus -->

### Set Typing Status

This function will Set users typing status.

> - Args:
>	- thread_id: User/Group ID to change status in.
>	- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.setTyping(<thread_id>, <thread_type>)
  ```

</br>

- Inside Module Function

  ```py
  self.setTyping(<thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.setTyping(<thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.setTyping(<thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.set_typing(<thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.set_typing(<thread_id>, <thread_type>)
  ```

</details>

<!-- END setTypingStatus -->

</br>

<!-- markAsDelivered -->

### Mark Message As Delivered

This function will Mark a message as delivered.

> - Args:
>	- msgId (int | str): Message ID to set as delivered
>	- cliMsgId (int | str): Client message ID
>	- senderId (int | str): Message sender Id
>	- thread_id (int | str): User/Group ID to mark as delivered
>	- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.markAsDelivered(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>)
  ```

</br>

- Inside Module Function

  ```py
  self.markAsDelivered(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.markAsDelivered(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.markAsDelivered(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.mark_as_delivered(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.mark_as_delivered(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>)
  ```

</details>

<!-- END markAsDelivered -->

</br>

<!-- markAsRead -->

### Mark Message As Read

This function will Mark a message as read.

> - Args:
>	- msgId (int | str): Message ID to set as delivered
>	- cliMsgId (int | str): Client message ID
>	- senderId (int | str): Message sender Id
>	- thread_id (int | str): User/Group ID to mark as read
>	- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Outside Module Function

  ```py
  bot.markAsRead(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>)
  ```

</br>

- Inside Module Function

  ```py
  self.markAsRead(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Outside Module Function

  ```py
  asyncio.run(bot.markAsRead(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await self.markAsRead(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>)
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

- Outside Module Function
  
  ```py
  asyncio.run(bot.mark_as_read(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>))
  ```

</br>

- Inside Module Function (You can use ``await`` instead.)

  ```py
  await bot.mark_as_read(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>)
  ```

</details>

<!-- END markAsRead -->

</br>

<!-- listen -->

### Listen

This function will Initialize and runs the listening loop continually.

> - Args:
>	- delay (int): Delay time for each message fetch for ``requests`` type (Default: 1)
>	- thread (bool): Handle messages within the thread for ``requests`` type (Default: False)
>	- type (str): Type of listening (Default: websocket)
>	- reconnect (int): Delay interval when reconnecting

- Use Outside Of Function

```py
bot.listen()
```

<!-- END listen -->

</br>

<!-- onListening -->

### On Listening

This function is called when the client is listening.

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Inside Module Custom Class

  ```py
  def onListening(self):
      ....
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Inside Module Custom Class

  ```py
  async def onListening(self):
      ....
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>


- Outside Module Class

  ```py
  @bot.event
  async def on_listening():
      ....
  ```

</details>

<!-- END onListening -->

</br>

<!-- onMessage -->

### On Message

This function is called when the client is listening, and somebody sends a message.

> - Args:
>	- mid: The message ID
>	- author_id: The ID of the author
>	- message: The message content of the author
>	- message_object: The message (As a `Message` object)
>	- thread_id: Thread ID that the message was sent to.
>	- thread_type (ThreadType): Type of thread that the message was sent to.

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Inside Module Custom Class

  ```py
  def onMessage(self, mid, author_id, message, message_object, thread_id, thread_type):
      ....
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Inside Module Custom Class

  ```py
  async def onMessage(self, mid, author_id, message, message_object, thread_id, thread_type):
      ....
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

> - In simple type, all event or register_handler functions use args with context.
>
> - Args Context Example:
>    - ctx.message_id
>    - ctx.author_id
>    - ctx.message
>    - ctx.message_object
>    - ctx.thread_id
>    - ctx.thread_type

- Outside Module Class

  ```py
  @bot.event
  async def on_message(ctx):
      ....
  ```

</details>

<!-- END onMessage -->

</br>

<!-- onEvent -->

### On Event

This function is called when the client listening, and some events occurred.

> - Args:
>	- event_data (EventObject): Event data (As a `EventObject` object)
>	- event_type (EventType/GroupEventType): Event Type

<details>
<summary><b><i>Normal</b> code style</i></summary>

- Inside Module Custom Class

  ```py
  def onEvent(self, event_data, event_type):
      ....
  ```

</details>

<details>
<summary><b><i>Async</b> code style</i></summary>

- Inside Module Custom Class

  ```py
  async def onEvent(self, event_data, event_type):
      ....
  ```

</details>

<details>
<summary><b><i>Simple</b> code style</i></summary>

> - In simple type, all event or register_handler functions use args with context.
>
> - Args Context Example:
>    - ctx.event_data
>    - ctx.event_type

- Outside Module Class

  ```py
  @bot.event
  async def on_event(ctx):
      ....
  ```

</details>

<!-- END onEvent -->

</br>

<!-- Messages -->

### Messages

Represents a Zalo message.

> - Args:
>    - text (str): The actual message
>    - style (MessageStyle/MultiMsgStyle): A ``MessageStyle`` or ``MultiMsgStyle`` objects
>    - mention (Mention/MultiMention): A ``Mention`` or ``MultiMention`` objects
>    - parse_mode (str): Format messages in ``Markdown``, ``HTML`` style

```py
Message(text=<text>, mention=<mention>, style=<style>)
```

<!-- END Messages -->

</br>

<!-- MessageStyle -->

### Message Style

Style for message.

> - Args:
>    - offset (int): The starting position of the style. Defaults to 0.
>    - length (int): The length of the style. Defaults to 1.
>    - style (str): The type of style. Can be "font", "bold", "italic", "underline", "strike", or "color". Defaults to "font".
>    - color (str): The color of the style in hexadecimal format (e.g. "ffffff"). Only applicable when style is "color". Defaults to "ffffff".
>    - size (int | str): The font size of the style. Only applicable when style is "font". Defaults to "18".
>    - auto_format (bool): If there are multiple styles (used in ``MultiMsgStyle``) then set it to False. Default is True (1 style)

- Example

  - **bold** style with offset is 5, length is 10.
  
  ```py
  style = MessageStyle(offset=5, length=10, style="bold")
  ...
  ```
  
  </br>
  
  - color style with offset is 10, length is 5 and color="![#ff0000](https://placehold.co/20x15/ff0000/ff0000.png) `#ff0000`"
  
  ```py
  style = MessageStyle(offset=10, ``length=5``, style="color", color="ff0000")
  ...
  ```
  
  </br>
  
  - font style with offset is 15, length is 8 and size="24" (Customize font size to 24)
  
  ```py
  style = MessageStyle(offset=15, length=8, style="font", size="24")
  ...
  ```

<!-- END MessageStyle -->

</br>

<!-- MultiMsgStyle -->

### Multiple Message Style

Multiple style for message.

> - Args:
>    - listStyle (MessageStyle): A list of ``MessageStyle`` objects to be combined into a single style format.

```py
style = MultiMsgStyle([
    MessageStyle(offset=<text>, length=<mention>, style=<style>, color=<color>, size=<size>, auto_format=False),
    MessageStyle(offset=<text>, length=<mention>, style=<style>, color=<color>, size=<size>, auto_format=False),
    ...
])
```

<!-- END MultiMsgStyle -->

</br>

<!-- Mention -->

### Mention

Represents a @mention.

> - Args:
>    - uid (str): The user ID to be mentioned.
>    - length (int): The length of the mention. Defaults to 1.
>    - offset (int): The starting position of the mention. Defaults to 0.
>    - auto_format (bool): If there are multiple mention (used in ``MultiMention``) then set it to False. Default is True (1 mention).

```py
mention = Mention(uid=<uid>, length=<length>, offset=<offset>)
...
```

</br>

- Mention user id *1234567890* with offset is 10 and length is 5.

```py
mention = Mention("1234567890", length=5, offset=10)
...
```

<!-- END Mention -->

</br>

<!-- MultiMention -->

### Multiple Mention

Represents multiple @mentions.

> - Args:
>    - listMention (Mention): A list of ``Mention`` objects to be combined into a single mention format.

```py
mention = MultiMention([
    Mention(uid=<uid>, length=<length>, offset=<offset>, auto_format=False),
    Mention(uid=<uid>, length=<length>, offset=<offset>, auto_format=False),
    ...
])
```

</br>

- Mention user id *1234567890* with offset is 10 and length is 5.
- Mention user id *9876543210* with offset is 20 and length is 3.

```py
mention1 = Mention("1234567890", length=5, offset=10)
mention2 = Mention("9876543210", length=3, offset=20)
mention = MultiMention([mention1, mention2])
```

<!-- END MultiMention -->

</br>

## Example

See [examples](examples) folder to learn more about ``zlapi``.

</br>

## Acknowledgments

- This project was originally inspired by [fbchat](https://github.com/fbchat-dev/fbchat).
- listen ``websocket`` type taken from [zca-js](https://github.com/RFS-ADRENO/zca-js).

- Thanks for support:
  - [Crow](https://t.me/crowmatacc) for Hosting.
  - [Duy Hoang](https://t.me/Tcp_API) for the Video Tutorial.
  - [Nguyen Hong Anh Duc](https://t.me/ducknha) for the Example.
  - [Khang Phan](https://www.facebook.com/khang.phan27.info) for help fix the ``listen`` function error.

## Contact For Help

- <img src="https://upload.wikimedia.org/wikipedia/commons/8/83/Telegram_2019_Logo.svg" alt="Telegram Icon" width=20 height=15/> Telegram: [Vexx](https://t.me/vrxx1337)
- <img src="https://raw.githubusercontent.com/dheereshagrwal/colored-icons/master/public/logos/facebook/facebook.svg" alt="Facebook Icon" width=20 height=15/> Facebook: [Lê Quốc Việt](https://www.facebook.com/profile.php?id=100094031375075)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "zlapi",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "python, zalo, api, zalo api, zalo chat, requests",
    "author": "L\u00ea Qu\u1ed1c Vi\u1ec7t (Vexx)",
    "author_email": "<vrxxdev@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/f5/89/83db0ffe3ac004aa54b50439b9f5bfb2f06e19b61977189fdc5819981b9a/zlapi-1.0.3.tar.gz",
    "platform": null,
    "description": "![Logo](https://i.imgur.com/CMnA5Sh.jpeg \"Logo\")\n\n## ``zlapi`` - Zalo API (Unofficial) for Python\n\n[![Project version](https://img.shields.io/badge/pypi-v1.0.2-blue.svg \"Project version\")](https://pypi.org/project/zlapi/1.0.2)\n[![Supported python versions: >= 3. and pypy](https://badgen.net/badge/python/>=3.,pypy?list=| \"Supported python versions: >= 3. and pypy\")](zlapi)\n[![License: MIT License](https://img.shields.io/badge/license-MIT-lightgreen.svg \"License: MIT License\")](https://github.com/Its-VrxxDev/zlapi/blob/master/LICENSE)\n[![Documentation](https://img.shields.io/badge/docs-stop_updating-red.svg \"Documentation\")](https://vrxx1337.vercel.app/zlapi/docs/lastest)\n\n### Language\n\n- S\u1ebd h\u1ed7 tr\u1ee3 t\u00e0i li\u1ec7u Ti\u1ebfng Vi\u1ec7t s\u1edbm nh\u1ea5t c\u00f3 th\u1ec3. S\u00e0i t\u1ea1m google d\u1ecbch nh\u00e9 :)\n\n### What is ``zlapi``?\n\nA powerful and efficient library to interact with Zalo Website. \nThis is *not* an official API, Zalo has that [over here](https://developers.zalo.me/docs) for chat bots. This library differs by using a normal Zalo account instead (More flexible).\n\n``zlapi`` currently support:\n\n- Custom style for message.\n- Sending many types of messages, with files, stickers, mentions, etc.\n- Fetching messages, threads and users info.\n- Creating groups, setting the group, creating polls, etc.\n- Listening for, an reacting to messages and other events in real-time.\n- And there are many other things.\n- ``async``/``await`` (Updated).\n\nEssentially, everything you need to make an amazing Zalo Bot!\n\n\n### Caveats\n\n``zlapi`` works by imitating what the browser does, and thereby tricking Zalo into thinking it's accessing the website normally.\n\nHowever, there's a catch! **Using this library may not comply with Zalo's Terms Of Service**, so be! We are not responsible if your account gets banned or disabled!\n\n\n### What's New?\n\nThis is an updated version for ``zlapi`` to improve features and fix bugs (v1.0.3)\n\n**Improvements**\n\n- Change function [replyMessage]()\n\n**Bugfixes**\n\n- Fixed not getting response from server when listening.\n\n- Fixed the error of login function, not requiring account & password when using cookies.\n\n**Deprecations**\n\n- The old login server has been removed due to lack of funds to maintain the server.\n\n</br>\n\n## Installation\n\n```bash\npip install zlapi\n```\n\nIf you don't have [pip](https://pip.pypa.io/), [this guide](http://docs.python-guide.org/en/latest/starting/installation/) can guide you through the process.\n\nYou can also install directly from source, provided you have ``pip>=19.0``:\n\n```bash\npip install git+https://github.com/Its-VrxxDev/zlapi.git\n```\n\n</br>\n\n## How to get IMEI and Cookies?\n\n### Download Extension\n\n- [Click Here](https://drive.google.com/file/d/18_-8ruYOVa89JkHdr3muGj3kGWxwt6mc/view?usp=drive_link) to download the extension support getting IMEI & Cookies more conveniently.\n\n### Extension Usage Tutorial\n\n1. Enable the extension downloaded above.\n2. Go to [https://chat.zalo.me](https://chat.zalo.me), Sign in to your account.\n3. After successfully logging in, go back to extension and get IMEI, Cookies.\n\n> [!TIP]\nIf you have opened the website ``chat.zalo.me`` but the extension does not have IMEI & Cookies, please click ``Refresh Page``.\n\n#### Windows\n\n[![](https://previews.jumpshare.com/thumb/815bc01b796dd6f1733c957c5af19493968eb06ccf48b6a5036cf7916c0a83965899fb056fe88c29f2bcb2f9f0f5ed5832801eede43aa22e94d5c7bc545ef9448bfbfd14044e807555841b406fdf069aa3acda441ff8675390fa0ff601ff0bcd)](https://jumpshare.com/embed/8SjFyd3EQlCMx1V7N1UQ)\n\n</br>\n\n#### Android\n\n> - Use ``kiwibrowser`` instead of ``chrome`` to be able to use the extension.\n> - If you are redirect when accessing ``https://chat.zalo.me``. [Watch this video](https://jumpshare.com/embed/l3LLjAWSAR8KQxvh9dzz)\n\n[![](https://previews.jumpshare.com/thumb/815bc01b796dd6f1733c957c5af194938966297dbb29c75d038ac93e0691be4c741e5e2cbb689c41b8dfebde4ded3316844e23ec82425f377c248f1a57861470e76e9fe268bdf0803c7c14a61c9dc50769f92efb3803e5ae68c46d260d3407db)](https://jumpshare.com/embed/n56jtVQ7pwZDfR5ZtPft)\n\n</br>\n\n## Basic Usage\n\n### Login Account Using Cookies\n\n* ``Normal``/``Async`` code style\n\n```py\n# > Normal\n# from zlapi import ZaloAPI\n\n# > Async\n# from zlapi.Async import ZaloAPI\n\nfrom zlapi import ZaloAPI\nfrom zlapi.models import *\n\nimei = \"<imei>\"\ncookies = {} # Cookies Dict\nbot = ZaloAPI(\"<phone>\", \"<password>\", imei=imei, session_cookies=cookies)\n```\n\n</br>\n\n* ``Simple`` code style\n\n```py\nfrom zlapi.simple import ZaloAPI\nfrom zlapi.models import *\n\nimei = \"<imei>\"\ncookies = {} # Cookies Dict\nbot = ZaloAPI(\"</>\", \"</>\", imei, cookies, prefix=\"<your bot prefix>\")\n```\n\n</br>\n\n### Listen Message, Event, ...\n\n* You can enable thread mode for [On Message](#on-message) function (work with ``requests`` type) with ``thread=True``.\n\n```py\nbot.listen(thread=True)\n```\n\n* You can customize the reconnect time when listening is interrupted using ``reconnect=...``.\n\n```py\nbot.listen(reconnect=5)\n```\n\n</br>\n\n* ``Normal``/``Async`` code style\n\n```py\n# > Normal\n# from zlapi import ZaloAPI\n\n# > Async\n# from zlapi.Async import ZaloAPI\n\nfrom zlapi import ZaloAPI\nfrom zlapi.models import *\n\nimei = \"<imei>\"\ncookies = {} # Cookies Dict\n\nbot = ZaloAPI(\"<phone>\", \"<password>\", imei=imei, session_cookies=cookies)\n# client.listen(type=\"...\")\nbot.listen()\n```\n\n</br>\n\n* ``Simple`` code style\n\n```py\nfrom zlapi.simple import ZaloAPI\nfrom zlapi.models import *\n\nimei = \"<imei>\"\ncookies = {} # Cookies Dict\n\nbot = ZaloAPI(\"</>\", \"</>\", imei, cookies, prefix=\"<your bot prefix>\")\nbot.listen()\n```\n\n</br>\n\n### Custom On Message Function\n\n``onMessage`` function will be called when receiving a message from ``listen`` function. **So we can handle that message here.**\n\n* ``Normal`` code style\n\n```py\nfrom zlapi import ZaloAPI\nfrom zlapi.models import *\n\nimei = \"<imei>\"\ncookies = {} # Cookies Dict\n\nclass CustomBot(ZaloAPI):\n    def onMessage(self, mid, author_id, message, message_object, thread_id, thread_type):\n        # Handle Message Here\n        pass\n\n\nbot = CustomBot(\"<phone>\", \"<password>\", imei=imei, session_cookies=cookies)\nbot.listen()\n```\n\n</br>\n\n* ``Async`` code style\n\n```py\nfrom zlapi.Async import ZaloAPI\nfrom zlapi.models import *\n\nimei = \"<imei>\"\ncookies = {} # Cookies Dict\n\nclass CustomBot(ZaloAPI):\n    async def onMessage(self, mid, author_id, message, message_object, thread_id, thread_type):\n        # Handle Message Here\n        pass\n\n\nbot = CustomBot(\"<phone>\", \"<password>\", imei=imei, session_cookies=cookies)\nbot.listen()\n```\n\n</br>\n\n* ``Simple`` code style\n\n```py\nfrom zlapi.simple import ZaloAPI\nfrom zlapi.models import *\n\nimei = \"<imei>\"\ncookies = {} # Cookies Dict\nbot = ZaloAPI(\"</>\", \"</>\", imei, cookies, prefix=\"<bot prefix>\")\n\n\n@bot.event\nasync def on_message(ctx):\n    # Handle Message Here\n    pass\n\n\nbot.listen()\n```\n\n</br>\n\n### Example Handle Message\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n```py\nfrom zlapi import ZaloAPI\nfrom zlapi.models import *\n\nimei = \"<imei>\"\ncookies = {} # Cookies Dict\n\nclass CustomBot(ZaloAPI):\n    def onMessage(self, mid, author_id, message, message_object, thread_id, thread_type):\n        if not isinstance(message, str):\n            return\n\n        if message == \".hi\":\n            print(f\"{author_id} sent message .hi\")\n\n\nbot = CustomBot(\"<phone>\", \"<password>\", imei=imei, session_cookies=cookies)\nbot.listen()\n```\n\n> - If the message is not ``string`` do not process this message.\n> - If the message is ``.hi`` will print author id of message to terminal.\n\n</br>\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n```py\nfrom zlapi.Async import ZaloAPI\nfrom zlapi.models import *\n\nimei = \"<imei>\"\ncookies = {} # Cookies Dict\n\nclass CustomBot(ZaloAPI):\n    async def onMessage(self, mid, author_id, message, message_object, thread_id, thread_type):\n        if not isinstance(message, str):\n            return\n\n        if message == \".hi\":\n            print(f\"{author_id} sent message .hi\")\n\n\nbot = CustomBot(\"<phone>\", \"<password>\", imei=imei, session_cookies=cookies)\nbot.listen()\n```\n\n> - If the message is not ``string`` do not process this message.\n> - If the message is ``.hi`` will print author id of message to terminal.\n\n</br>\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Method 1\n\n  ```py\n  from zlapi.simple import ZaloAPI\n  from zlapi.models import *\n\n  imei = \"<imei>\"\n  cookies = {} # Cookies Dict\n  bot = ZaloAPI(\"</>\", \"</>\", imei, cookies, prefix=\"<bot prefix>\")\n\n  \n  @bot.event\n  async def on_message(ctx):\n      if ctx.message == \".hi\":\n          print(f\"{ctx.author_id} sent message .hi\")\n\n\n  bot.listen()\n  ```\n\n</br>\n\n- Method 2\n\n  ```py\n  from zlapi.simple import ZaloAPI\n  from zlapi.models import *\n\n  imei = \"<imei>\"\n  cookies = {} # Cookies Dict\n  bot = ZaloAPI(\"</>\", \"</>\", imei, cookies, prefix=\".\")\n\n\n  @bot.register_handler(commands=[\"hi\"])\n  async def handle_hi(ctx):\n      print(f\"{ctx.author_id} sent message .hi\")\n\n  \n  bot.listen()\n  ```\n  \n  > - ``@bot.register_handler(commands=[\"hi\"])`` is a decoration class used to register a command. When an incoming message matches the bot prefix + registered commands, the message will be processed.\n\n</details>\n\n</br>\n\n<!-- fetchAccountInfo -->\n\n### Fetch Account Information\n\nThis function will get the account information you are using in ``zlapi``.\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.fetchAccountInfo()\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.fetchAccountInfo()\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.fetchAccountInfo())\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.fetchAccountInfo()\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.fetch_account_info())\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.fetch_account_info()\n  ```\n\n</details>\n\n<!-- END FetchAccountInfo -->\n\n</br>\n\n<!-- fetchPhoneNumber -->\n\n### Fetch Phone Number\n\nThis function will get user information using that user phone number.\n\n> [!NOTE]\nCan't get information of **hidden phone number** or **locked account**\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.fetchPhoneNumber(\"<phone number>\")\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.fetchPhoneNumber(\"<phone number>\")\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.fetchPhoneNumber(\"<phone number>\"))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.fetchPhoneNumber(\"<phone number>\")\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.fetch_phone_number(\"<phone number>\"))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.fetch_phone_number(\"<phone number>\")\n  ```\n\n</details>\n\n<!-- END FetchPhoneNumber -->\n\n</br>\n\n<!-- fetchUserInfo -->\n\n### Fetch User Info\n\nThis function will get user information using that user ID.\n\n> - In ``Normal``/``Async`` code style you can get user id with author_id argument\n> - In ``Simple`` code style you can get user id with ctx.author_id argument\n> - Or you can use user id if you already have one\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.fetchUserInfo(<user id>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.fetchUserInfo(<user id>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.fetchUserInfo(<user id>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.fetchUserInfo(<user id>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.fetch_user_info(<user id>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.fetch_user_info(<user id>)\n  ```\n\n</details>\n\n<!-- END FetchUserInfo -->\n\n</br>\n\n<!-- fetchGroupInfo -->\n\n### Fetch Group Info\n\nThis function will get group information using that group ID.\n\n> - In ``Normal``/``Async`` code style you can get user id with thread_id argument\n> - In ``Simple`` code style you can get user id with ctx.thread_id argument\n> - Or you can use group id if you already have one\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.fetchGroupInfo(<group id>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.fetchGroupInfo(<group id>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.fetchGroupInfo(<group id>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.fetchGroupInfo(<group id>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.fetch_group_info(<group id>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.fetch_group_info(<user id>)\n  ```\n\n</details>\n\n<!-- END FetchGroupInfo -->\n\n</br>\n\n<!-- fetchAllFriends -->\n\n### Fetch All Friends\n\nThis function will get all the friends information of the account currently using the ``zlapi``.\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.fetchAllFriends()\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.fetchAllFriends()\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.fetchAllFriends())\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.fetchAllFriends()\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.fetch_all_friends())\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.fetch_all_friends()\n  ```\n\n</details>\n\n<!-- END FetchAllFriends -->\n\n</br>\n\n<!-- fetchAllGroups -->\n\n### Fetch All Groups\n\nThis function will get all the groups id of the account currently using the ``zlapi``.\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.fetchAllGroups()\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.fetchAllGroups()\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.fetchAllGroups())\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.fetchAllGroups()\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.fetch_all_groups())\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.fetch_all_groups()\n  ```\n\n</details>\n\n<!-- END FetchAllGroups -->\n\n</br>\n\n<!-- changeAccountSetting -->\n\n### Change Account Setting\n\nThis function will change setting of the account currently using the ``zlapi``.\n\n> - Args:\n>    - name (str): The new account name\n>    - dob (str): Date of birth wants to change (format: year-month-day)\n>    - gender (int | str): Gender wants to change (0 = Male, 1 = Female)\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.changeAccountSetting(<name>, <dob>, <gender>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.changeAccountSetting(<name>, <dob>, <gender>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.changeAccountSetting(<name>, <dob>, <gender>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.changeAccountSetting(<name>, <dob>, <gender>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.change_account_setting(<name>, <dob>, <gender>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.change_account_setting(<name>, <dob>, <gender>)\n  ```\n\n</details>\n\n<!-- END changeAccountSetting -->\n\n</br>\n\n<!-- changeAccountAvatar -->\n\n### Change Account Avatar\n\nThis function will upload/change avatar of the account currently using the ``zlapi``.\n\n> - Args:\n>    - filePath (str): A path to the image to upload/change avatar\n>    - size (int): Avatar image size (default = auto)\n>\t- width (int): Width of avatar image\n>\t- height (int): height of avatar image\n>\t- language (int | str): Zalo Website language ? (idk)\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.changeAccountAvatar(<filePath>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.changeAccountAvatar(<filePath>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.changeAccountAvatar(<filePath>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.changeAccountAvatar(<filePath>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.change_account_avatar(<filePath>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.change_account_avatar(<filePath>)\n  ```\n\n</details>\n\n<!-- END changeAccountAvatar -->\n\n</br>\n\n<!-- sendFriendRequest -->\n\n### Send Friend Request\n\nThis function will send friend request to a user by ID.\n\n> - Args:\n>\t- userId (int | str): User ID to send friend request\n>\t- msg (str): Friend request message\n>\t- language (str): Response language or Zalo interface language\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.sendFriendRequest(<userId>, <msg>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.sendFriendRequest(<userId>, <msg>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.sendFriendRequest(<userId>, <msg>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.sendFriendRequest(<userId>, <msg>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.send_friend_request(<userId>, <msg>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.send_friend_request(<userId>, <msg>)\n  ```\n\n</details>\n\n<!-- END sendFriendRequest -->\n\n</br>\n\n<!-- acceptFriendRequest -->\n\n### Accept Friend Request\n\nThis function will accept friend request from user by ID.\n\n> - Args:\n>\t- userId (int | str): User ID to accept friend request\n>\t- language (str): Response language or Zalo interface language\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.acceptFriendRequest(<userId>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.acceptFriendRequest(<userId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.acceptFriendRequest(<userId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.acceptFriendRequest(<userId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.accept_friend_request(<userId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.accept_friend_request(<userId>)\n  ```\n\n</details>\n\n<!-- END acceptFriendRequest -->\n\n</br>\n\n<!-- blockViewFeed -->\n\n### Block View Feed\n\nThis function will Block/Unblock friend view feed by ID.\n\n> - Args:\n>\t- userId (int | str): User ID to block/unblock view feed\n>\t- isBlockFeed (int): Block/Unblock friend view feed (1 = True | 0 = False)\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.blockViewFeed(<userId>, <isBlockFeed>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.blockViewFeed(<userId>, <isBlockFeed>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.blockViewFeed(<userId>, <isBlockFeed>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.blockViewFeed(<userId>, <isBlockFeed>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.block_view_feed(<userId>, <isBlockFeed>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.block_view_feed(<userId>, <isBlockFeed>)\n  ```\n\n</details>\n\n<!-- END blockViewFeed -->\n\n</br>\n\n<!-- blockUser -->\n\n### Block User\n\nThis function will block user by ID.\n\n> - Args:\n>\t- userId (int | str): User ID to block\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.blockUser(<userId>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.blockUser(<userId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.blockUser(<userId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.blockUser(<userId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.block_user(<userId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.block_user(<userId>)\n  ```\n\n</details>\n\n<!-- END blockUser -->\n\n</br>\n\n<!-- unblockUser -->\n\n### Unblock User\n\nThis function will unblock user by ID.\n\n> - Args:\n>\t- userId (int | str): User ID to unblock\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.unblockUser(<userId>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.unblockUser(<userId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.unblockUser(<userId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.unblockUser(<userId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.unblock_user(<userId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.unblock_user(<userId>)\n  ```\n\n</details>\n\n<!-- END unblockUser -->\n\n</br>\n\n<!-- createGroup -->\n\n### Create Group\n\nThis function will Create a new group.\n\n> - Args:\n>\t- name (str): The new group name\n>\t- description (str): Description of the new group\n>\t- members (str | list): List/String member IDs add to new group\n>\t- nameChanged (int - auto): Will use default name if disabled (0), else (1)\n>\t- createLink (int - default): Create a group link? Default = 1 (True)\n\t\t\t\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.createGroup(<name>, <description>, <members>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.createGroup(<name>, <description>, <members>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.createGroup(<name>, <description>, <members>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.createGroup(<name>, <description>, <members>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.create_group(<name>, <description>, <members>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.create_group(<name>, <description>, <members>)\n  ```\n\n</details>\n\n<!-- END createGroup -->\n\n</br>\n\n<!-- changeGroupAvatar -->\n\n### Change Group Avatar\n\nThis function will Upload/Change group avatar by ID.\n\n> - Args:\n>\t- filePath (str): A path to the image to upload/change avatar\n>\t- groupId (int | str): Group ID to upload/change avatar\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.changeGroupAvatar(<filePath>, <groupId>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.changeGroupAvatar(<filePath>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.changeGroupAvatar(<filePath>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.changeGroupAvatar(<filePath>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.change_group_avatar(<filePath>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.change_group_avatar(<filePath>, <groupId>)\n  ```\n\n</details>\n\n> [!NOTE]\nClient must be the Owner of the group\n(If the group does not allow members to upload/change)\n\n<!-- END changeGroupAvatar -->\n\n</br>\n\n<!-- changeGroupName -->\n\n### Change Group Name\n\nThis function will Set/Change group name by ID.\n\n> - Args:\n>\t- groupName (str): Group name to change\n>\t- groupId (int | str): Group ID to change name\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.changeGroupName(<groupName>, <groupId>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.changeGroupName(<groupName>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.changeGroupName(<groupName>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.changeGroupName(<groupName>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.change_group_name(<groupName>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.change_group_name(<groupName>, <groupId>)\n  ```\n\n</details>\n\n> [!NOTE]\nClient must be the Owner of the group\n(If the group does not allow members to upload/change)\n\n<!-- END changeGroupName -->\n\n</br>\n\n<!-- changeGroupSetting -->\n\n### Change Group Setting\n\nThis function will Update group settings by ID.\n\n> - Args:\n>\t- groupId (int | str): Group ID to update settings\n>\t- defaultMode (str): Default mode of settings\n>\t\t\t\n>\t\t- default: Group default settings\n>\t\t- anti-raid: Group default settings for anti-raid\n>\t\t\t\n>\t- **kwargs: Group settings kwargs, Value: (1 = True, 0 = False)\n>\t\t\t\n>\t\t- blockName: Kh\u00f4ng cho ph\u00e9p user \u0111\u1ed5i t\u00ean & \u1ea3nh \u0111\u1ea1i di\u1ec7n nh\u00f3m\n>\t\t- signAdminMsg: \u0110\u00e1nh d\u1ea5u tin nh\u1eafn t\u1eeb ch\u1ee7/ph\u00f3 nh\u00f3m\n>\t\t- addMemberOnly: Ch\u1ec9 th\u00eam members (Khi t\u1eaft link tham gia nh\u00f3m)\n>\t\t- setTopicOnly: Cho ph\u00e9p members ghim (tin nh\u1eafn, ghi ch\u00fa, b\u00ecnh ch\u1ecdn)\n>\t\t- enableMsgHistory: Cho ph\u00e9p new members \u0111\u1ecdc tin nh\u1eafn g\u1ea7n nh\u1ea5t\n>\t\t- lockCreatePost: Kh\u00f4ng cho ph\u00e9p members t\u1ea1o ghi ch\u00fa, nh\u1eafc h\u1eb9n\n>\t\t- lockCreatePoll: Kh\u00f4ng cho ph\u00e9p members t\u1ea1o b\u00ecnh ch\u1ecdn\n>\t\t- joinAppr: Ch\u1ebf \u0111\u1ed9 ph\u00ea duy\u1ec7t th\u00e0nh vi\u00ean\n>\t\t- bannFeature: Default (No description)\n>\t\t- dirtyMedia: Default (No description)\n>\t\t- banDuration: Default (No description)\n>\t\t- lockSendMsg: Kh\u00f4ng cho ph\u00e9p members g\u1eedi tin nh\u1eafn\n>\t\t- lockViewMember: Kh\u00f4ng cho ph\u00e9p members xem th\u00e0nh vi\u00ean nh\u00f3m\n>\t\t- blocked_members: Danh s\u00e1ch members b\u1ecb ch\u1eb7n\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.changeGroupSetting(<groupId>, **kwargs)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.changeGroupSetting(<groupId>, **kwargs)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.changeGroupSetting(<groupId>, **kwargs))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.changeGroupSetting(<groupId>, **kwargs)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.change_group_setting(<groupId>, **kwargs))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.change_group_setting(<groupId>, **kwargs)\n  ```\n\n</details>\n\n> [!WARNING]\nOther settings will default value if not set. See `defaultMode`\n\n<!-- END changeGroupSetting -->\n\n</br>\n\n<!-- changeGroupOwner -->\n\n### Change Group Owner\n\nThis function will Change group owner by ID.\n\n> - Args:\n>\t- newAdminId (int | str): members ID to changer owner\n>\t- groupId (int | str): ID of the group to changer owner\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.changeGroupOwner(<newAdminId>, <groupId>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.changeGroupOwner(<newAdminId>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.changeGroupOwner(<newAdminId>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.changeGroupOwner(<newAdminId>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.change_group_owner(<newAdminId>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.change_group_owner(<newAdminId>, <groupId>)\n  ```\n\n</details>\n\n> [!NOTE]\nClient must be the Owner of the group.\n\n<!-- END changeGroupOwner -->\n\n</br>\n\n<!-- addUsersToGroup -->\n\n### Add Users To Group\n\nThis function will Add friends/users to a group.\n\n> - Args:\n>\t- user_ids (str | list): One or more friend/user IDs to add\n>\t- groupId (int | str): Group ID to add friend/user to\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.addUsersToGroup(<user_ids>, <groupId>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.addUsersToGroup(<user_ids>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.addUsersToGroup(<user_ids>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.addUsersToGroup(<user_ids>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.add_users_to_group(<user_ids>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.add_users_to_group(<user_ids>, <groupId>)\n  ```\n\n</details>\n\n<!-- END addUsersToGroup -->\n\n</br>\n\n<!-- kickUsersInGroup -->\n\n### Kick Users In Group\n\nThis function will Kickout members in group by ID.\n\n> - Args:\n>\t- members (str | list): One or More member IDs to kickout\n>\t- groupId (int | str): Group ID to kick member from\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.kickUsersInGroup(<members>, <groupId>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.kickUsersInGroup(<members>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.kickUsersInGroup(<members>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.kickUsersInGroup(<members>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.kick_users_in_group(<members>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.kick_users_in_group(<members>, <groupId>)\n  ```\n\n</details>\n\n> [!NOTE]\nClient must be the Owner of the group.\n\n<!-- END kickUsersInGroup -->\n\n</br>\n\n<!-- blockUsersInGroup -->\n\n### Block Users In Group\n\nThis function will Blocked members in group by ID.\n\n> - Args:\n>\t- members (str | list): One or More member IDs to block\n>\t- groupId (int | str): Group ID to block member from\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.blockUsersInGroup(<members>, <groupId>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.blockUsersInGroup(<members>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.blockUsersInGroup(<members>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.blockUsersInGroup(<members>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.block_users_in_group(<members>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.block_users_in_group(<members>, <groupId>)\n  ```\n\n</details>\n\n> [!NOTE]\nClient must be the Owner of the group.\n\n<!-- END blockUsersInGroup -->\n\n</br>\n\n<!-- unblockUsersInGroup -->\n\n### Unblock Users In Group\n\nThis function will Unblock members in group by ID.\n\n> - Args:\n>\t- members (str | list): One or More member IDs to unblock\n>\t- groupId (int | str): Group ID to unblock member from\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.unblockUsersInGroup(<members>, <groupId>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.unblockUsersInGroup(<members>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.unblockUsersInGroup(<members>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.unblockUsersInGroup(<members>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.unblock_users_in_group(<members>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.unblock_users_in_group(<members>, <groupId>)\n  ```\n\n</details>\n\n> [!NOTE]\nClient must be the Owner of the group.\n\n<!-- END unblockUsersInGroup -->\n\n</br>\n\n<!-- addGroupAdmins -->\n\n### Add Group Admins\n\nThis function will Add admins to the group by ID.\n\n> - Args:\n>\t- members (str | list): One or More member IDs to add\n>\t- groupId (int | str): Group ID to add admins\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.addGroupAdmins(<members>, <groupId>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.addGroupAdmins(<members>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.addGroupAdmins(<members>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.addGroupAdmins(<members>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.add_group_admins(<members>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.add_group_admins(<members>, <groupId>)\n  ```\n\n</details>\n\n> [!NOTE]\nClient must be the Owner of the group.\n\n<!-- END addGroupAdmins -->\n\n</br>\n\n<!-- removeGroupAdmins -->\n\n### Remove Group Admins\n\nThis function will Remove admins in the group by ID.\n\n> - Args:\n>\t- members (str | list): One or More admin IDs to remove\n>\t- groupId (int | str): Group ID to remove admins\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.removeGroupAdmins(<members>, <groupId>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.removeGroupAdmins(<members>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.removeGroupAdmins(<members>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.removeGroupAdmins(<members>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.remove_group_admins(<members>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.remove_group_admins(<members>, <groupId>)\n  ```\n\n</details>\n\n> [!NOTE]\nClient must be the Owner of the group.\n\n<!-- END removeGroupAdmins -->\n\n</br>\n\n<!-- pinGroupMsg -->\n\n### Pin Group Message\n\nThis function will Pin message in group by ID.\n\n> - Args:\n>\t- pinMsg (Message): Message Object to pin\n>\t- groupId (int | str): Group ID to pin message\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.pinGroupMsg(<pinMsg>, <groupId>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.pinGroupMsg(<pinMsg>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.pinGroupMsg(<pinMsg>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.pinGroupMsg(<pinMsg>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.pin_group_msg(<pinMsg>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.pin_group_msg(<pinMsg>, <groupId>)\n  ```\n\n</details>\n\n<!-- END pinGroupMsg -->\n\n</br>\n\n<!-- unpinGroupMsg -->\n\n### Unpin Group Message\n\nThis function will Unpin message in group by ID.\n\n> - Args:\n>\t- pinId (int | str): Pin ID to unpin\n>\t- pinTime (int): Pin start time\n>\t- groupId (int | str): Group ID to unpin message\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.unpinGroupMsg(<pinId>, <pinTime>, <groupId>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.unpinGroupMsg(<pinId>, <pinTime>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.unpinGroupMsg(<pinId>, <pinTime>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.unpinGroupMsg(<pinId>, <pinTime>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.unpin_group_msg(<pinId>, <pinTime>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.unpin_group_msg(<pinId>, <pinTime>, <groupId>)\n  ```\n\n</details>\n\n<!-- END unpinGroupMsg -->\n\n</br>\n\n<!-- deleteGroupMsg -->\n\n### Delete Group Message\n\nThis function will Delete message in group by ID.\n\n> - Args:\n>\t- msgId (int | str): Message ID to delete\n>\t- ownerId (int | str): Owner ID of the message to delete\n>\t- clientMsgId (int | str): Client message ID to delete message\n>\t- groupId (int | str): Group ID to delete message\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.deleteGroupMsg(<msgId>, <onwerId>, <clientMsgId>, <groupId>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.deleteGroupMsg(<msgId>, <onwerId>, <clientMsgId>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.deleteGroupMsg(<msgId>, <onwerId>, <clientMsgId>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.deleteGroupMsg(<msgId>, <onwerId>, <clientMsgId>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.delete_group_msg(<msgId>, <onwerId>, <clientMsgId>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.delete_group_msg(<msgId>, <onwerId>, <clientMsgId>, <groupId>)\n  ```\n\n</details>\n\n<!-- END deleteGroupMsg -->\n\n</br>\n\n<!-- viewGroupPending -->\n\n### View Group Pending\n\nThis function will Give list of people pending approval in group by ID.\n\n> - Args:\n>\t- groupId (int | str): Group ID to view pending members\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.viewGroupPending(<groupId>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.viewGroupPending(<groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.viewGroupPending(<groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.viewGroupPending(<groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.view_group_pending(<groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.view_group_pending(<groupId>)\n  ```\n\n</details>\n\n<!-- END viewGroupPending -->\n\n</br>\n\n<!-- handleGroupPending -->\n\n### Handle Group Pending\n\nThis function will Approve/Deny pending users to the group from the group's approval.\n\n> - Args:\n>\t- members (str | list): One or More member IDs to handle\n>\t- groupId (int | str): ID of the group to handle pending members\n>\t- isApprove (bool): Approve/Reject pending members (True | False)\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.handleGroupPending(<members>, <groupId>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.handleGroupPending(<members>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.handleGroupPending(<members>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.handleGroupPending(<members>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.handle_group_pending(<members>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.handle_group_pending(<members>, <groupId>)\n  ```\n\n</details>\n\n<!-- END handleGroupPending -->\n\n</br>\n\n<!-- viewPollDetail -->\n\n### View Poll Detail\n\nThis function will Give poll data by ID.\n\n> - Args:\n>\t- pollId (int | str): Poll ID to view detail\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.viewPollDetail(<pollId>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.viewPollDetail(<pollId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.viewPollDetail(<pollId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.viewPollDetail(<pollId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.view_poll_detail(<pollId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.view_poll_detail(<pollId>)\n  ```\n\n</details>\n\n<!-- END viewPollDetail -->\n\n</br>\n\n<!-- createPoll -->\n\n### Create Poll\n\nThis function will Create poll in group by ID.\n\n> - Args:\n>\t- question (str): Question for poll\n>\t- options (str | list): List options for poll\n>\t- groupId (int | str): Group ID to create poll from\n>\t- expiredTime (int): Poll expiration time (0 = no expiration)\n>\t- pinAct (bool): Pin action (pin poll)\n>\t- multiChoices (bool): Allows multiple poll choices\n>\t- allowAddNewOption (bool): Allow members to add new options\n>\t- hideVotePreview (bool): Hide voting results when haven't voted\n>\t- isAnonymous (bool): Hide poll voters\n\t\t\t\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.createPoll(<question>, <options>, <groupId>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.createPoll(<question>, <options>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.createPoll(<question>, <options>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.createPoll(<question>, <options>, <groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.create_poll(<question>, <options>, <groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.create_poll(<question>, <options>, <groupId>)\n  ```\n\n</details>\n\n<!-- END createPoll -->\n\n</br>\n\n<!-- lockPoll -->\n\n### Lock Poll\n\nThis function will Lock/end poll by ID.\n\n> - Args:\n>\t- pollId (int | str): Poll ID to lock\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.lockPoll(<pollId>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.lockPoll(<pollId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.lockPoll(<pollId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.lockPoll(<pollId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.lock_poll(<pollId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.lock_poll(<pollId>)\n  ```\n\n</details>\n\n<!-- END lockPoll -->\n\n</br>\n\n<!-- disperseGroup -->\n\n### Disperse Group\n\nThis function will Disperse group by ID.\n\n> - Args:\n>\t- groupId (int | str): Group ID to disperse\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.disperseGroup(<groupId>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.disperseGroup(<groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.disperseGroup(<groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.disperseGroup(<groupId>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.disperse_group(<groupId>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.disperse_group(<groupId>)\n  ```\n\n</details>\n\n<!-- END disperseGroup -->\n\n</br>\n\n<!-- send/sendMessage -->\n\n### Send Message\n\nThis function will Send message to a thread (user/group).\n\n> - Args:\n>\t- message (Message): ``Message`` Object to send\n>\t- thread_id (int | str): User/Group ID to send to\n>\t- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``\n>\t- mark_message (str): Send messages as `Urgent` or `Important` mark\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  bot.send(<message>, <thread_id>, <thread_type>)\n  ```\n  \n  or\n  \n  ```py\n  bot.sendMessage(<message>, <thread_id>, <thread_type>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.send(<message>, <thread_id>, <thread_type>)\n  ```\n  \n  or\n  \n  ```py\n  self.sendMessage(<message>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.send(<message>, <thread_id>, <thread_type>))\n  ```\n  \n  or\n  \n  ```py\n  asyncio.run(bot.sendMessage(<message>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.send(<message>, <thread_id>, <thread_type>)\n  ```\n  \n  or\n  \n  ```py\n  await self.sendMessage(<message>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.send(<message>, <thread_id>, <thread_type>))\n  ```\n  \n  or\n  \n  ```py\n  asyncio.run(bot.send_message(<message>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.send(<message>, <thread_id>, <thread_type>)\n  ```\n  \n  or\n  \n  ```py\n  await bot.send_message(<message>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<!-- END send/sendMessage -->\n\n</br>\n\n<!-- replyMessage -->\n\n### Reply Message\n\nThis function will Reply message in thread (user/group).\n\n> - Args:\n>\t- replyMsg (Message): ``Message Object`` to reply\n>\t- message (Message): ``Message Object`` to send\n>\t- thread_id (int | str): User/Group ID to send to.\n>\t- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.replyTo(<replyMsg>, <message>, <thread_id>, <thread_type>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.replyTo(<replyMsg>, <message>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.replyTo(<replyMsg>, <message>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.replyTo(<replyMsg>, <message>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.reply_to(<replyMsg>, <message>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.reply_to(<replyMsg>, <message>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<!-- END replyMessage -->\n\n</br>\n\n<!-- undoMessage -->\n\n### Undo Message\n\nThis function will Undo message from the client (self) by ID.\n\n> - Args:\n>\t- msgId (int | str): Message ID to undo\n>\t- cliMsgId (int | str): Client Msg ID to undo\n>\t- thread_id (int | str): User/Group ID to undo message\n>\t- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``\n\t\t\t\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.undoMessage(<msgId>, <cliMsgId>, <thread_id>, <thread_type>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.undoMessage(<msgId>, <cliMsgId>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.undoMessage(<msgId>, <cliMsgId>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.undoMessage(<msgId>, <cliMsgId>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.undo_message(<msgId>, <cliMsgId>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.undo_message(<msgId>, <cliMsgId>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<!-- END undoMessage -->\n\n</br>\n\n<!-- sendReaction -->\n\n### Send Reaction\n\nThis function will Reaction message in thread (user/group) by ID.\n\n> - Args:\n>\t- messageObject (Message): ``Message Object`` to reaction\n>\t- reactionIcon (str): Icon/Text to reaction\n>\t- thread_id (int | str): Group/User ID contain message to reaction\n>\t- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.sendReaction(<messageObject>, <reactionIcon>, <thread_id>, <thread_type>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.sendReaction(<messageObject>, <reactionIcon>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.sendReaction(<messageObject>, <reactionIcon>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.sendReaction(<messageObject>, <reactionIcon>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.send_reaction(<messageObject>, <reactionIcon>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.send_reaction(<messageObject>, <reactionIcon>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<!-- END sendReaction -->\n\n</br>\n\n<!-- sendMultiReaction -->\n\n### Send Multiple Reactions\n\nThis function will Reaction multi message in thread (user/group) by ID.\n\n> - Args:\n>\t- reactionObj (MessageReaction): Message(s) data to reaction\n>\t- reactionIcon (str): Icon/Text to reaction\n>\t- thread_id (int | str): Group/User ID contain message to reaction\n>\t- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.sendMultiReaction(<reactionObj>, <reactionIcon>, <thread_id>, <thread_type>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.sendMultiReaction(<reactionObj>, <reactionIcon>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.sendMultiReaction(<reactionObj>, <reactionIcon>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.sendMultiReaction(<reactionObj>, <reactionIcon>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.send_multi_reaction(<reactionObj>, <reactionIcon>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.send_multi_reaction(<reactionObj>, <reactionIcon>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<!-- END sendMultiReaction -->\n\n</br>\n\n<!-- sendRemoteFile -->\n\n### Send Remote File\n\nThis function will Send File to a User/Group with url.\n\n> - Args:\n>\t- fileUrl (str): File url to send\n>\t- thread_id (int | str): User/Group ID to send to.\n>\t- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``\n>\t- fileName (str): File name to send\n>\t- fileSize (int): File size to send\n>\t- extension (str): type of file to send (py, txt, mp4, ...)\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.sendRemoteFile(<fileUrl>, <thread_id>, <thread_type>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.sendRemoteFile(<fileUrl>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.sendRemoteFile(<fileUrl>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.sendRemoteFile(<fileUrl>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.send_remote_file(<fileUrl>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.send_remote_file(<fileUrl>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<!-- END sendRemoteFile -->\n\n</br>\n\n<!-- sendRemoteVideo -->\n\n### Send Remote Video\n\nThis function will Send video to a User/Group with url.\n\n> - Args:\n>\t- videoUrl (str): Video link to send\n>\t- thumbnailUrl (str): Thumbnail link for video\n>\t- duration (int | str): Time for video (ms)\n>\t- thread_id (int | str): User/Group ID to send to.\n>\t- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``\n>\t- width (int): Width of the video\n>\t- height (int): Height of the video\n>\t- message (Message): ``Message Object`` to send with video\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.sendRemoteVideo(<videoUrl>, <thumbnailUrl>, <duration>, <thread_id>, <thread_type>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.sendRemoteVideo(<videoUrl>, <thumbnailUrl>, <duration>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.sendRemoteVideo(<videoUrl>, <thumbnailUrl>, <duration>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.sendRemoteVideo(<videoUrl>, <thumbnailUrl>, <duration>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.send_remote_video(<videoUrl>, <thumbnailUrl>, <duration>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.send_remote_video(<videoUrl>, <thumbnailUrl>, <duration>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<!-- END sendRemoteVideo -->\n\n</br>\n\n<!-- sendRemoteVoice -->\n\n### Send Remote Voice\n\nThis function will Send voice to a User/Group with url.\n\n> - Args:\n>\t- voiceUrl (str): Voice link to send\n>\t- thread_id (int | str): User/Group ID to change status in\n>\t- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``\n>\t- fileSize (int | str): Voice content length (size) to send\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.sendRemoteVoice(<voiceUrl>, <thread_id>, <thread_type>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.sendRemoteVoice(<voiceUrl>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.sendRemoteVoice(<voiceUrl>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.sendRemoteVoice(<voiceUrl>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.send_remote_voice(<voiceUrl>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.send_remote_voice(<voiceUrl>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<!-- END sendRemoteVoice -->\n\n</br>\n\n<!-- sendLocalImage -->\n\n### Send Local Image\n\nThis function will Send Image to a User/Group with local file.\n\n> - Args:\n>\t- imagePath (str): Image directory to send\n>\t- thread_id (int | str): User/Group ID to send to.\n>\t- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``\n>\t- width (int): Image width to send\n>\t- height (int): Image height to send\n>\t- message (Message): ``Message Object`` to send with image\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.sendLocalImage(<imagePath>, <thread_id>, <thread_type>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.sendLocalImage(<imagePath>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.sendLocalImage(<imagePath>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.sendLocalImage(<imagePath>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.send_local_image(<imagePath>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.send_local_image(<imagePath>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<!-- END sendLocalImage -->\n\n</br>\n\n<!-- sendMultiLocalImage -->\n\n### Send Multiple Local Image\n\nThis function will Send Multiple Image to a User/Group with local file.\n\n> - Args:\n>\t- imagePathList (list): List image directory to send\n>\t- thread_id (int | str): User/Group ID to send to.\n>\t- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``\n>\t- width (int): Image width to send\n>\t- height (int): Image height to send\n>\t- message (Message): ``Message Object`` to send with image\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.sendMultiLocalImage(<imagePathList>, <thread_id>, <thread_type>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.sendMultiLocalImage(<imagePathList>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.sendMultiLocalImage(<imagePathList>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.sendMultiLocalImage(<imagePathList>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.send_multi_local_image(<imagePathList>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.send_multi_local_image(<imagePathList>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<!-- END sendMultiLocalImage -->\n\n</br>\n\n<!-- sendLocalGif -->\n\n### Send Local Gif\n\nThis function will Send Gif to a User/Group with local file.\n\n> - Args:\n>\t- gifPath (str): Gif path to send\n>\t- thumbnailUrl (str): Thumbnail of gif to send\n>\t- thread_id (int | str): User/Group ID to send to.\n>\t- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``\n>\t- gifName (str): Gif name to send\n>\t- width (int): Gif width to send\n>\t- height (int): Gif height to send\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.sendLocalGif(<gifPath>, <thumbnailUrl>, <thread_id>, <thread_type>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.sendLocalGif(<gifPath>, <thumbnailUrl>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.sendLocalGif(<gifPath>, <thumbnailUrl>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.sendLocalGif(<gifPath>, <thumbnailUrl>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.send_local_gif(<gifPath>, <thumbnailUrl>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.send_local_gif(<gifPath>, <thumbnailUrl>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<!-- END sendLocalGif -->\n\n</br>\n\n<!-- sendSticker -->\n\n### Send Sticker\n\nThis function will Send Sticker to a User/Group.\n\n> - Args:\n>\t- stickerType (int | str): Sticker type to send\n>\t- stickerId (int | str): Sticker id to send\n>\t- cateId (int | str): Sticker category id to send\n>\t- thread_id (int | str): User/Group ID to send to.\n>\t- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.sendSticker(<stickerType>, <stickerId>, <cateId>, <thread_id>, <thread_type>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.sendSticker(<stickerType>, <stickerId>, <cateId>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.sendSticker(<stickerType>, <stickerId>, <cateId>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.sendSticker(<stickerType>, <stickerId>, <cateId>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.send_sticker(<stickerType>, <stickerId>, <cateId>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.send_sticker(<stickerType>, <stickerId>, <cateId>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<!-- END sendSticker -->\n\n</br>\n\n<!-- sendCustomSticker -->\n\n### Send Custom Sticker\n\nThis function will Send custom (static/animation) sticker to a User/Group with url.\n\n> - Args:\n>\t- staticImgUrl (str): Image url (png, jpg, jpeg) format to create sticker\n>\t- animationImgUrl (str): Static/Animation image url (webp) format to create sticker\n>\t- thread_id (int | str): User/Group ID to send sticker to.\n>\t- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``\n>\t- reply (int | str): Message ID to send stickers with quote\n>\t- width (int | str): Width of photo/sticker\n>\t- height (int | str): Height of photo/sticker\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.sendCustomSticker(<staticImgUrl>, <animationImgUrl>, <thread_id>, <thread_type>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.sendCustomSticker(<staticImgUrl>, <animationImgUrl>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.sendCustomSticker(<staticImgUrl>, <animationImgUrl>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.sendCustomSticker(<staticImgUrl>, <animationImgUrl>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.send_custom_sticker(<staticImgUrl>, <animationImgUrl>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.send_custom_sticker(<staticImgUrl>, <animationImgUrl>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<!-- END sendCustomSticker -->\n\n</br>\n\n<!-- sendLink -->\n\n### Send Link\n\nThis function will Send link to a User/Group with url.\n\n> - Args:\n>\t- linkUrl (str): Link url to send\n>\t- title (str): Title for card to send\n>\t- thread_id (int | str): User/Group ID to send link to\n>\t- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``\n>\t- thumbnailUrl (str): Thumbnail link url for card to send\n>\t- domainUrl (str): Main domain of Link to send (eg: github.com)\n>\t- desc (str): Description for card to send\n>\t- message (Message): ``Message Object`` to send with the link\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.sendLink(<linkUrl>, <title>, <thread_id>, <thread_type>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.sendLink(<linkUrl>, <title>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.sendLink(<linkUrl>, <title>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.sendLink(<linkUrl>, <title>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.send_link(<linkUrl>, <title>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.send_link(<linkUrl>, <title>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<!-- END sendLink -->\n\n</br>\n\n<!-- sendReport -->\n\n### Send Report\n\nThis function will Send report to Zalo.\n\n> - Args:\n>\t- thread_id (int | str): User/Group ID to report\n>\t- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``\n>\t- reason (int): Reason for reporting\n>\t\t\t\n>\t\t- 1 = N\u1ed9i dung nh\u1ea1y c\u1ea3m\n>\t\t- 2 = L\u00e0m phi\u1ec1n\n>\t\t- 3 = L\u1eeba \u0111\u1ea3o\n>\t\t- 0 = custom\n>\t\t\t\n>\t- content (str): Report content (work if reason = custom)\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.sendReport(<thread_id>, <thread_type>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.sendReport(<thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.sendReport(<thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.sendReport(<thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.send_report(<thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.send_report(<thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<!-- END sendReport -->\n\n</br>\n\n<!-- sendBusinessCard -->\n\n### Send Business Card\n\nThis function will Send business card to thread (user/group) by user ID.\n\n> - Args:\n>\t- userId (int | str): Business card user ID\n>\t- qrCodeUrl (str): QR Code link with business card profile information\n>\t- thread_id (int | str): User/Group ID to change status in\n>\t- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``\n>\t- phone (int | str): Send business card with phone number\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.sendBusinessCard(<userId>, <qrCodeUrl>, <thread_id>, <thread_type>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.sendBusinessCard(<userId>, <qrCodeUrl>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.sendBusinessCard(<userId>, <qrCodeUrl>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.sendBusinessCard(<userId>, <qrCodeUrl>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.send_business_card(<userId>, <qrCodeUrl>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.send_business_card(<userId>, <qrCodeUrl>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<!-- END sendBusinessCard -->\n\n</br>\n\n<!-- setTypingStatus -->\n\n### Set Typing Status\n\nThis function will Set users typing status.\n\n> - Args:\n>\t- thread_id: User/Group ID to change status in.\n>\t- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.setTyping(<thread_id>, <thread_type>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.setTyping(<thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.setTyping(<thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.setTyping(<thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.set_typing(<thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.set_typing(<thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<!-- END setTypingStatus -->\n\n</br>\n\n<!-- markAsDelivered -->\n\n### Mark Message As Delivered\n\nThis function will Mark a message as delivered.\n\n> - Args:\n>\t- msgId (int | str): Message ID to set as delivered\n>\t- cliMsgId (int | str): Client message ID\n>\t- senderId (int | str): Message sender Id\n>\t- thread_id (int | str): User/Group ID to mark as delivered\n>\t- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.markAsDelivered(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.markAsDelivered(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.markAsDelivered(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.markAsDelivered(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.mark_as_delivered(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.mark_as_delivered(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<!-- END markAsDelivered -->\n\n</br>\n\n<!-- markAsRead -->\n\n### Mark Message As Read\n\nThis function will Mark a message as read.\n\n> - Args:\n>\t- msgId (int | str): Message ID to set as delivered\n>\t- cliMsgId (int | str): Client message ID\n>\t- senderId (int | str): Message sender Id\n>\t- thread_id (int | str): User/Group ID to mark as read\n>\t- thread_type (ThreadType): ``ThreadType.USER``, ``ThreadType.GROUP``\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  bot.markAsRead(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>)\n  ```\n\n</br>\n\n- Inside Module Function\n\n  ```py\n  self.markAsRead(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Outside Module Function\n\n  ```py\n  asyncio.run(bot.markAsRead(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await self.markAsRead(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n- Outside Module Function\n  \n  ```py\n  asyncio.run(bot.mark_as_read(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>))\n  ```\n\n</br>\n\n- Inside Module Function (You can use ``await`` instead.)\n\n  ```py\n  await bot.mark_as_read(<msgId>, <cliMsgId>, <senderId>, <thread_id>, <thread_type>)\n  ```\n\n</details>\n\n<!-- END markAsRead -->\n\n</br>\n\n<!-- listen -->\n\n### Listen\n\nThis function will Initialize and runs the listening loop continually.\n\n> - Args:\n>\t- delay (int): Delay time for each message fetch for ``requests`` type (Default: 1)\n>\t- thread (bool): Handle messages within the thread for ``requests`` type (Default: False)\n>\t- type (str): Type of listening (Default: websocket)\n>\t- reconnect (int): Delay interval when reconnecting\n\n- Use Outside Of Function\n\n```py\nbot.listen()\n```\n\n<!-- END listen -->\n\n</br>\n\n<!-- onListening -->\n\n### On Listening\n\nThis function is called when the client is listening.\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Inside Module Custom Class\n\n  ```py\n  def onListening(self):\n      ....\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Inside Module Custom Class\n\n  ```py\n  async def onListening(self):\n      ....\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n\n- Outside Module Class\n\n  ```py\n  @bot.event\n  async def on_listening():\n      ....\n  ```\n\n</details>\n\n<!-- END onListening -->\n\n</br>\n\n<!-- onMessage -->\n\n### On Message\n\nThis function is called when the client is listening, and somebody sends a message.\n\n> - Args:\n>\t- mid: The message ID\n>\t- author_id: The ID of the author\n>\t- message: The message content of the author\n>\t- message_object: The message (As a `Message` object)\n>\t- thread_id: Thread ID that the message was sent to.\n>\t- thread_type (ThreadType): Type of thread that the message was sent to.\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Inside Module Custom Class\n\n  ```py\n  def onMessage(self, mid, author_id, message, message_object, thread_id, thread_type):\n      ....\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Inside Module Custom Class\n\n  ```py\n  async def onMessage(self, mid, author_id, message, message_object, thread_id, thread_type):\n      ....\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n> - In simple type, all event or register_handler functions use args with context.\n>\n> - Args Context Example:\n>    - ctx.message_id\n>    - ctx.author_id\n>    - ctx.message\n>    - ctx.message_object\n>    - ctx.thread_id\n>    - ctx.thread_type\n\n- Outside Module Class\n\n  ```py\n  @bot.event\n  async def on_message(ctx):\n      ....\n  ```\n\n</details>\n\n<!-- END onMessage -->\n\n</br>\n\n<!-- onEvent -->\n\n### On Event\n\nThis function is called when the client listening, and some events occurred.\n\n> - Args:\n>\t- event_data (EventObject): Event data (As a `EventObject` object)\n>\t- event_type (EventType/GroupEventType): Event Type\n\n<details>\n<summary><b><i>Normal</b> code style</i></summary>\n\n- Inside Module Custom Class\n\n  ```py\n  def onEvent(self, event_data, event_type):\n      ....\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Async</b> code style</i></summary>\n\n- Inside Module Custom Class\n\n  ```py\n  async def onEvent(self, event_data, event_type):\n      ....\n  ```\n\n</details>\n\n<details>\n<summary><b><i>Simple</b> code style</i></summary>\n\n> - In simple type, all event or register_handler functions use args with context.\n>\n> - Args Context Example:\n>    - ctx.event_data\n>    - ctx.event_type\n\n- Outside Module Class\n\n  ```py\n  @bot.event\n  async def on_event(ctx):\n      ....\n  ```\n\n</details>\n\n<!-- END onEvent -->\n\n</br>\n\n<!-- Messages -->\n\n### Messages\n\nRepresents a Zalo message.\n\n> - Args:\n>    - text (str): The actual message\n>    - style (MessageStyle/MultiMsgStyle): A ``MessageStyle`` or ``MultiMsgStyle`` objects\n>    - mention (Mention/MultiMention): A ``Mention`` or ``MultiMention`` objects\n>    - parse_mode (str): Format messages in ``Markdown``, ``HTML`` style\n\n```py\nMessage(text=<text>, mention=<mention>, style=<style>)\n```\n\n<!-- END Messages -->\n\n</br>\n\n<!-- MessageStyle -->\n\n### Message Style\n\nStyle for message.\n\n> - Args:\n>    - offset (int): The starting position of the style. Defaults to 0.\n>    - length (int): The length of the style. Defaults to 1.\n>    - style (str): The type of style. Can be \"font\", \"bold\", \"italic\", \"underline\", \"strike\", or \"color\". Defaults to \"font\".\n>    - color (str): The color of the style in hexadecimal format (e.g. \"ffffff\"). Only applicable when style is \"color\". Defaults to \"ffffff\".\n>    - size (int | str): The font size of the style. Only applicable when style is \"font\". Defaults to \"18\".\n>    - auto_format (bool): If there are multiple styles (used in ``MultiMsgStyle``) then set it to False. Default is True (1 style)\n\n- Example\n\n  - **bold** style with offset is 5, length is 10.\n  \n  ```py\n  style = MessageStyle(offset=5, length=10, style=\"bold\")\n  ...\n  ```\n  \n  </br>\n  \n  - color style with offset is 10, length is 5 and color=\"![#ff0000](https://placehold.co/20x15/ff0000/ff0000.png) `#ff0000`\"\n  \n  ```py\n  style = MessageStyle(offset=10, ``length=5``, style=\"color\", color=\"ff0000\")\n  ...\n  ```\n  \n  </br>\n  \n  - font style with offset is 15, length is 8 and size=\"24\" (Customize font size to 24)\n  \n  ```py\n  style = MessageStyle(offset=15, length=8, style=\"font\", size=\"24\")\n  ...\n  ```\n\n<!-- END MessageStyle -->\n\n</br>\n\n<!-- MultiMsgStyle -->\n\n### Multiple Message Style\n\nMultiple style for message.\n\n> - Args:\n>    - listStyle (MessageStyle): A list of ``MessageStyle`` objects to be combined into a single style format.\n\n```py\nstyle = MultiMsgStyle([\n    MessageStyle(offset=<text>, length=<mention>, style=<style>, color=<color>, size=<size>, auto_format=False),\n    MessageStyle(offset=<text>, length=<mention>, style=<style>, color=<color>, size=<size>, auto_format=False),\n    ...\n])\n```\n\n<!-- END MultiMsgStyle -->\n\n</br>\n\n<!-- Mention -->\n\n### Mention\n\nRepresents a @mention.\n\n> - Args:\n>    - uid (str): The user ID to be mentioned.\n>    - length (int): The length of the mention. Defaults to 1.\n>    - offset (int): The starting position of the mention. Defaults to 0.\n>    - auto_format (bool): If there are multiple mention (used in ``MultiMention``) then set it to False. Default is True (1 mention).\n\n```py\nmention = Mention(uid=<uid>, length=<length>, offset=<offset>)\n...\n```\n\n</br>\n\n- Mention user id *1234567890* with offset is 10 and length is 5.\n\n```py\nmention = Mention(\"1234567890\", length=5, offset=10)\n...\n```\n\n<!-- END Mention -->\n\n</br>\n\n<!-- MultiMention -->\n\n### Multiple Mention\n\nRepresents multiple @mentions.\n\n> - Args:\n>    - listMention (Mention): A list of ``Mention`` objects to be combined into a single mention format.\n\n```py\nmention = MultiMention([\n    Mention(uid=<uid>, length=<length>, offset=<offset>, auto_format=False),\n    Mention(uid=<uid>, length=<length>, offset=<offset>, auto_format=False),\n    ...\n])\n```\n\n</br>\n\n- Mention user id *1234567890* with offset is 10 and length is 5.\n- Mention user id *9876543210* with offset is 20 and length is 3.\n\n```py\nmention1 = Mention(\"1234567890\", length=5, offset=10)\nmention2 = Mention(\"9876543210\", length=3, offset=20)\nmention = MultiMention([mention1, mention2])\n```\n\n<!-- END MultiMention -->\n\n</br>\n\n## Example\n\nSee [examples](examples) folder to learn more about ``zlapi``.\n\n</br>\n\n## Acknowledgments\n\n- This project was originally inspired by [fbchat](https://github.com/fbchat-dev/fbchat).\n- listen ``websocket`` type taken from [zca-js](https://github.com/RFS-ADRENO/zca-js).\n\n- Thanks for support:\n  - [Crow](https://t.me/crowmatacc) for Hosting.\n  - [Duy Hoang](https://t.me/Tcp_API) for the Video Tutorial.\n  - [Nguyen Hong Anh Duc](https://t.me/ducknha) for the Example.\n  - [Khang Phan](https://www.facebook.com/khang.phan27.info) for help fix the ``listen`` function error.\n\n## Contact For Help\n\n- <img src=\"https://upload.wikimedia.org/wikipedia/commons/8/83/Telegram_2019_Logo.svg\" alt=\"Telegram Icon\" width=20 height=15/> Telegram: [Vexx](https://t.me/vrxx1337)\n- <img src=\"https://raw.githubusercontent.com/dheereshagrwal/colored-icons/master/public/logos/facebook/facebook.svg\" alt=\"Facebook Icon\" width=20 height=15/> Facebook: [L\u00ea Qu\u1ed1c Vi\u1ec7t](https://www.facebook.com/profile.php?id=100094031375075)\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "zlapi: Zalo API for Python",
    "version": "1.0.3",
    "project_urls": null,
    "split_keywords": [
        "python",
        " zalo",
        " api",
        " zalo api",
        " zalo chat",
        " requests"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0b3e4994b4a517dc1bcd4c9e81942f23c6d1abbfe6649ceedbc2848cf894fabb",
                "md5": "cdb3ac270deafa4548342bdc01b0905c",
                "sha256": "888226c199cb3298116ad8ee4c15659cf52cd46c8fcf41a709f43420159fa888"
            },
            "downloads": -1,
            "filename": "zlapi-1.0.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "cdb3ac270deafa4548342bdc01b0905c",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 77467,
            "upload_time": "2024-11-23T00:40:43",
            "upload_time_iso_8601": "2024-11-23T00:40:43.067965Z",
            "url": "https://files.pythonhosted.org/packages/0b/3e/4994b4a517dc1bcd4c9e81942f23c6d1abbfe6649ceedbc2848cf894fabb/zlapi-1.0.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f58983db0ffe3ac004aa54b50439b9f5bfb2f06e19b61977189fdc5819981b9a",
                "md5": "313244b7557f05c49132ae532af79b28",
                "sha256": "81ece21d411701a9a88272636785affb9bba2ef3f84d221e38295679116df815"
            },
            "downloads": -1,
            "filename": "zlapi-1.0.3.tar.gz",
            "has_sig": false,
            "md5_digest": "313244b7557f05c49132ae532af79b28",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 95937,
            "upload_time": "2024-11-23T00:40:44",
            "upload_time_iso_8601": "2024-11-23T00:40:44.868191Z",
            "url": "https://files.pythonhosted.org/packages/f5/89/83db0ffe3ac004aa54b50439b9f5bfb2f06e19b61977189fdc5819981b9a/zlapi-1.0.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-23 00:40:44",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "zlapi"
}
        
Elapsed time: 1.02995s