summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-05 08:08:55 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-05 08:08:55 +0000
commit1d671b50ee9a898a8a0850fd19c8b52f3c9928ac (patch)
tree7f212fb97b86965d22291a0fa714facf96fee3b5
parentfc785c1d629f676b2752624c1c6064de0a77ab73 (diff)
automatic import of python-dbotsopeneuler20.03
-rw-r--r--.gitignore1
-rw-r--r--python-dbots.spec522
-rw-r--r--sources1
3 files changed, 524 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..45644f2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/dbots-4.0.0.tar.gz
diff --git a/python-dbots.spec b/python-dbots.spec
new file mode 100644
index 0000000..10b7d61
--- /dev/null
+++ b/python-dbots.spec
@@ -0,0 +1,522 @@
+%global _empty_manifest_terminate_build 0
+Name: python-dbots
+Version: 4.0.0
+Release: 1
+Summary: Discord bot list poster and stats retriever
+License: MIT License
+URL: https://github.com/dbots-pkg/dbots.py
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/14/2b/c7c74f0a49ab76c7fa305e73ca07b978003881360baba819964eede49429/dbots-4.0.0.tar.gz
+BuildArch: noarch
+
+
+%description
+<div align="center">
+ <p>
+ <img src="static/logo.png" alt="dbots.py logo" width="200" />
+ </p>
+ <p>A stats poster and API wrapper for all botlists.</p>
+ <p>
+ <a href="https://www.pypi.org/project/dbots"><img src="https://img.shields.io/pypi/v/dbots?style=for-the-badge" alt="PyPi version" /></a>
+ <a href="https://www.pypi.org/project/dbots"><img src="https://img.shields.io/pypi/dm/dbots?style=for-the-badge" alt="PyPi downloads" /></a>
+ <a href="https://libraries.io/pypi/dbots"><img src="https://img.shields.io/librariesio/release/pypi/dbots?style=for-the-badge" alt="Dependencies" /></a>
+ <a href="https://dbots.readthedocs.io/en/latest/?badge=latest"><img src="https://readthedocs.org/projects/dbots/badge/?version=latest&style=for-the-badge" alt="Documentation Status" /></a>
+ </p>
+</div>
+<br/>
+
+<!-- omit in toc -->
+# Table of Contents
+- [About](#about)
+- [Installing](#installing)
+- [Examples](#examples)
+ - [Example with client](#example-with-client)
+ - [Example without client](#example-without-client)
+- [Services](#services)
+ - [Supported Services](#supported-services)
+ - [Adding Custom Services](#adding-custom-services)
+ - [Adding a custom post function](#adding-a-custom-post-function)
+- [Contribution](#contribution)
+- [Other Links](#other-links)
+
+## About
+`dbots` helps [Discord](https://discordapp.com) bot developers group all your statistic posting needs into one poster, complete with seperate posting, and a loop to post to all services every `n` seconds.
+
+## Installing
+**Python 3.6 or higher is required!**
+You can install dbots by running this command:
+```sh
+# Linux/macOS
+python3 -m pip install -U dbots
+
+# Windows
+py -3 -m pip install -U dbots
+```
+
+To install package from the master branch, do the following:
+```sh
+git clone https://github.com/dbots-pkg/dbots.py
+cd dbots.py
+python3 -m pip install -U
+```
+
+## Examples
+
+### Example with client
+Currently, only `discord.py` is supported as a usable client. (You can use any derivative of `discord.py` as long as it does not interfere with important properties used by `dbots`.)
+```py
+import discord
+import dbots
+
+client = discord.Client()
+poster = dbots.ClientPoster(client, 'discord.py', api_keys = {
+ 'top.gg': '…',
+ 'discord.bots.gg': '…'
+})
+
+@client.event
+async def on_ready():
+ print('Logged on as', client.user)
+ await poster.post()
+ # This posts to all lists every 30 minutes
+ # You can stop the loop with `poster.kill_loop()`
+ poster.start_loop()
+
+@poster.event
+async def on_auto_post(response):
+ print('Auto-Post:', response)
+
+"""
+You can also define the event you want to get by adding an argument to the decorator.
+
+@poster.event('post')
+async def some_function(response):
+ print(response)
+"""
+```
+
+### Example without client
+```py
+import dbots
+
+client_id = '1234567890'
+def server_count():
+ return 100
+def user_count():
+ return 100
+def voice_connections():
+ return 0
+
+# `server_count`, `user_count`, and `voice_connections` can either be regular functions or coroutines
+poster = dbots.Poster(client_id, server_count, user_count, voice_connections, api_keys = {
+ 'top.gg': '…',
+ 'discord.bots.gg': '…'
+})
+```
+
+See more examples [here](/examples).
+
+## Services
+
+### Supported Services
+ - [arcane-center.xyz](https://arcane-center.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.Arcane))
+ - [blist.xyz](https://blist.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.Blist))
+ - [botlist.space](https://botlist.space) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.BotListSpace))
+ - [botsdatabase.com](https://botsdatabase.com/) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.BotsDataBase))
+ - [botsfordiscord.com](https://botsfordiscord.com) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.BotsForDiscord))
+ - [bots.ondiscord.xyz](https://bots.ondiscord.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.BotsOnDiscord))
+ - [carbonitex.net](https://www.carbonitex.net/Discord/bots) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.Carbon))
+ - [dblista.pl](https://dblista.pl) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DBLista))
+ - [discordbots.co](https://discordbots.co) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordBotsCo))
+ - [discord.bots.gg](https://discord.bots.gg) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordBotsGG))
+ - [discordapps.dev](https://discordapps.dev) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordAppsDev))
+ - [discord.boats](https://discord.boats) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordBoats))
+ - [discordbotlist.com](https://discordbotlist.com) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordBotList))
+ - [discordbot.world](https://discordbot.world) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordBotWorld))
+ - [discordextremelist.xyz](https://discordextremelist.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordExtremeList))
+ - [bots.discordlabs.org](https://bots.discordlabs.org) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordLabs))
+ - [discordlistology.com](https://discordlistology.com) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordListology))
+ - [lbots.org](https://lbots.org) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.LBots))
+ - [listmybots.com](https://listmybots.com) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.ListMyBots))
+ - [mythicalbots.xyz](https://mythicalbots.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.MythicalBots))
+ - [space-bot-list.xyz](https://space-bot-list.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.SpaceBotsList))
+ - [topcord.xyz](https://topcord.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.TopCord))
+ - [top.gg](https://top.gg) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.TopGG))
+ - [wonderbotlist.com](https://wonderbotlist.com) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.WonderBotList))
+ - [yabl.xyz](yabl.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.YABL))
+
+### Adding Custom Services
+You can add custom services by extending from the base service class (`dbots.Service`) and overriding the `_post` and `aliases` method.
+Make sure to add the custom service class to the service keymap. (`dbots.Service.SERVICE_KEYMAP`) An example of adding a custom service can be shown [here](/examples/custom_service.py).
+
+### Adding a custom post function
+You can add a custom post event by defining `on_custom_post` in the initialization of a Poster.
+This function can be used when executing `poster.post('custom')` and when all services are being posted to.
+An example of adding a custom post function can be shown [here](/examples/custom_post.py).
+
+## Contribution
+Any contribution may be useful for the package! Make sure when making issues or PRs that the issue has not been addressed yet in a past issue/PR.
+
+## Other Links
+- [PyPi](https://www.pypi.org/project/dbots)
+- [Libraries.io](https://libraries.io/pypi/dbots)
+- [Documentation](https://dbots.readthedocs.io/en/latest/index.html)
+- [dbots Github Organization](https://github.com/dbots-pkg)
+
+%package -n python3-dbots
+Summary: Discord bot list poster and stats retriever
+Provides: python-dbots
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-dbots
+<div align="center">
+ <p>
+ <img src="static/logo.png" alt="dbots.py logo" width="200" />
+ </p>
+ <p>A stats poster and API wrapper for all botlists.</p>
+ <p>
+ <a href="https://www.pypi.org/project/dbots"><img src="https://img.shields.io/pypi/v/dbots?style=for-the-badge" alt="PyPi version" /></a>
+ <a href="https://www.pypi.org/project/dbots"><img src="https://img.shields.io/pypi/dm/dbots?style=for-the-badge" alt="PyPi downloads" /></a>
+ <a href="https://libraries.io/pypi/dbots"><img src="https://img.shields.io/librariesio/release/pypi/dbots?style=for-the-badge" alt="Dependencies" /></a>
+ <a href="https://dbots.readthedocs.io/en/latest/?badge=latest"><img src="https://readthedocs.org/projects/dbots/badge/?version=latest&style=for-the-badge" alt="Documentation Status" /></a>
+ </p>
+</div>
+<br/>
+
+<!-- omit in toc -->
+# Table of Contents
+- [About](#about)
+- [Installing](#installing)
+- [Examples](#examples)
+ - [Example with client](#example-with-client)
+ - [Example without client](#example-without-client)
+- [Services](#services)
+ - [Supported Services](#supported-services)
+ - [Adding Custom Services](#adding-custom-services)
+ - [Adding a custom post function](#adding-a-custom-post-function)
+- [Contribution](#contribution)
+- [Other Links](#other-links)
+
+## About
+`dbots` helps [Discord](https://discordapp.com) bot developers group all your statistic posting needs into one poster, complete with seperate posting, and a loop to post to all services every `n` seconds.
+
+## Installing
+**Python 3.6 or higher is required!**
+You can install dbots by running this command:
+```sh
+# Linux/macOS
+python3 -m pip install -U dbots
+
+# Windows
+py -3 -m pip install -U dbots
+```
+
+To install package from the master branch, do the following:
+```sh
+git clone https://github.com/dbots-pkg/dbots.py
+cd dbots.py
+python3 -m pip install -U
+```
+
+## Examples
+
+### Example with client
+Currently, only `discord.py` is supported as a usable client. (You can use any derivative of `discord.py` as long as it does not interfere with important properties used by `dbots`.)
+```py
+import discord
+import dbots
+
+client = discord.Client()
+poster = dbots.ClientPoster(client, 'discord.py', api_keys = {
+ 'top.gg': '…',
+ 'discord.bots.gg': '…'
+})
+
+@client.event
+async def on_ready():
+ print('Logged on as', client.user)
+ await poster.post()
+ # This posts to all lists every 30 minutes
+ # You can stop the loop with `poster.kill_loop()`
+ poster.start_loop()
+
+@poster.event
+async def on_auto_post(response):
+ print('Auto-Post:', response)
+
+"""
+You can also define the event you want to get by adding an argument to the decorator.
+
+@poster.event('post')
+async def some_function(response):
+ print(response)
+"""
+```
+
+### Example without client
+```py
+import dbots
+
+client_id = '1234567890'
+def server_count():
+ return 100
+def user_count():
+ return 100
+def voice_connections():
+ return 0
+
+# `server_count`, `user_count`, and `voice_connections` can either be regular functions or coroutines
+poster = dbots.Poster(client_id, server_count, user_count, voice_connections, api_keys = {
+ 'top.gg': '…',
+ 'discord.bots.gg': '…'
+})
+```
+
+See more examples [here](/examples).
+
+## Services
+
+### Supported Services
+ - [arcane-center.xyz](https://arcane-center.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.Arcane))
+ - [blist.xyz](https://blist.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.Blist))
+ - [botlist.space](https://botlist.space) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.BotListSpace))
+ - [botsdatabase.com](https://botsdatabase.com/) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.BotsDataBase))
+ - [botsfordiscord.com](https://botsfordiscord.com) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.BotsForDiscord))
+ - [bots.ondiscord.xyz](https://bots.ondiscord.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.BotsOnDiscord))
+ - [carbonitex.net](https://www.carbonitex.net/Discord/bots) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.Carbon))
+ - [dblista.pl](https://dblista.pl) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DBLista))
+ - [discordbots.co](https://discordbots.co) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordBotsCo))
+ - [discord.bots.gg](https://discord.bots.gg) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordBotsGG))
+ - [discordapps.dev](https://discordapps.dev) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordAppsDev))
+ - [discord.boats](https://discord.boats) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordBoats))
+ - [discordbotlist.com](https://discordbotlist.com) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordBotList))
+ - [discordbot.world](https://discordbot.world) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordBotWorld))
+ - [discordextremelist.xyz](https://discordextremelist.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordExtremeList))
+ - [bots.discordlabs.org](https://bots.discordlabs.org) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordLabs))
+ - [discordlistology.com](https://discordlistology.com) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordListology))
+ - [lbots.org](https://lbots.org) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.LBots))
+ - [listmybots.com](https://listmybots.com) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.ListMyBots))
+ - [mythicalbots.xyz](https://mythicalbots.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.MythicalBots))
+ - [space-bot-list.xyz](https://space-bot-list.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.SpaceBotsList))
+ - [topcord.xyz](https://topcord.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.TopCord))
+ - [top.gg](https://top.gg) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.TopGG))
+ - [wonderbotlist.com](https://wonderbotlist.com) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.WonderBotList))
+ - [yabl.xyz](yabl.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.YABL))
+
+### Adding Custom Services
+You can add custom services by extending from the base service class (`dbots.Service`) and overriding the `_post` and `aliases` method.
+Make sure to add the custom service class to the service keymap. (`dbots.Service.SERVICE_KEYMAP`) An example of adding a custom service can be shown [here](/examples/custom_service.py).
+
+### Adding a custom post function
+You can add a custom post event by defining `on_custom_post` in the initialization of a Poster.
+This function can be used when executing `poster.post('custom')` and when all services are being posted to.
+An example of adding a custom post function can be shown [here](/examples/custom_post.py).
+
+## Contribution
+Any contribution may be useful for the package! Make sure when making issues or PRs that the issue has not been addressed yet in a past issue/PR.
+
+## Other Links
+- [PyPi](https://www.pypi.org/project/dbots)
+- [Libraries.io](https://libraries.io/pypi/dbots)
+- [Documentation](https://dbots.readthedocs.io/en/latest/index.html)
+- [dbots Github Organization](https://github.com/dbots-pkg)
+
+%package help
+Summary: Development documents and examples for dbots
+Provides: python3-dbots-doc
+%description help
+<div align="center">
+ <p>
+ <img src="static/logo.png" alt="dbots.py logo" width="200" />
+ </p>
+ <p>A stats poster and API wrapper for all botlists.</p>
+ <p>
+ <a href="https://www.pypi.org/project/dbots"><img src="https://img.shields.io/pypi/v/dbots?style=for-the-badge" alt="PyPi version" /></a>
+ <a href="https://www.pypi.org/project/dbots"><img src="https://img.shields.io/pypi/dm/dbots?style=for-the-badge" alt="PyPi downloads" /></a>
+ <a href="https://libraries.io/pypi/dbots"><img src="https://img.shields.io/librariesio/release/pypi/dbots?style=for-the-badge" alt="Dependencies" /></a>
+ <a href="https://dbots.readthedocs.io/en/latest/?badge=latest"><img src="https://readthedocs.org/projects/dbots/badge/?version=latest&style=for-the-badge" alt="Documentation Status" /></a>
+ </p>
+</div>
+<br/>
+
+<!-- omit in toc -->
+# Table of Contents
+- [About](#about)
+- [Installing](#installing)
+- [Examples](#examples)
+ - [Example with client](#example-with-client)
+ - [Example without client](#example-without-client)
+- [Services](#services)
+ - [Supported Services](#supported-services)
+ - [Adding Custom Services](#adding-custom-services)
+ - [Adding a custom post function](#adding-a-custom-post-function)
+- [Contribution](#contribution)
+- [Other Links](#other-links)
+
+## About
+`dbots` helps [Discord](https://discordapp.com) bot developers group all your statistic posting needs into one poster, complete with seperate posting, and a loop to post to all services every `n` seconds.
+
+## Installing
+**Python 3.6 or higher is required!**
+You can install dbots by running this command:
+```sh
+# Linux/macOS
+python3 -m pip install -U dbots
+
+# Windows
+py -3 -m pip install -U dbots
+```
+
+To install package from the master branch, do the following:
+```sh
+git clone https://github.com/dbots-pkg/dbots.py
+cd dbots.py
+python3 -m pip install -U
+```
+
+## Examples
+
+### Example with client
+Currently, only `discord.py` is supported as a usable client. (You can use any derivative of `discord.py` as long as it does not interfere with important properties used by `dbots`.)
+```py
+import discord
+import dbots
+
+client = discord.Client()
+poster = dbots.ClientPoster(client, 'discord.py', api_keys = {
+ 'top.gg': '…',
+ 'discord.bots.gg': '…'
+})
+
+@client.event
+async def on_ready():
+ print('Logged on as', client.user)
+ await poster.post()
+ # This posts to all lists every 30 minutes
+ # You can stop the loop with `poster.kill_loop()`
+ poster.start_loop()
+
+@poster.event
+async def on_auto_post(response):
+ print('Auto-Post:', response)
+
+"""
+You can also define the event you want to get by adding an argument to the decorator.
+
+@poster.event('post')
+async def some_function(response):
+ print(response)
+"""
+```
+
+### Example without client
+```py
+import dbots
+
+client_id = '1234567890'
+def server_count():
+ return 100
+def user_count():
+ return 100
+def voice_connections():
+ return 0
+
+# `server_count`, `user_count`, and `voice_connections` can either be regular functions or coroutines
+poster = dbots.Poster(client_id, server_count, user_count, voice_connections, api_keys = {
+ 'top.gg': '…',
+ 'discord.bots.gg': '…'
+})
+```
+
+See more examples [here](/examples).
+
+## Services
+
+### Supported Services
+ - [arcane-center.xyz](https://arcane-center.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.Arcane))
+ - [blist.xyz](https://blist.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.Blist))
+ - [botlist.space](https://botlist.space) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.BotListSpace))
+ - [botsdatabase.com](https://botsdatabase.com/) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.BotsDataBase))
+ - [botsfordiscord.com](https://botsfordiscord.com) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.BotsForDiscord))
+ - [bots.ondiscord.xyz](https://bots.ondiscord.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.BotsOnDiscord))
+ - [carbonitex.net](https://www.carbonitex.net/Discord/bots) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.Carbon))
+ - [dblista.pl](https://dblista.pl) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DBLista))
+ - [discordbots.co](https://discordbots.co) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordBotsCo))
+ - [discord.bots.gg](https://discord.bots.gg) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordBotsGG))
+ - [discordapps.dev](https://discordapps.dev) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordAppsDev))
+ - [discord.boats](https://discord.boats) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordBoats))
+ - [discordbotlist.com](https://discordbotlist.com) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordBotList))
+ - [discordbot.world](https://discordbot.world) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordBotWorld))
+ - [discordextremelist.xyz](https://discordextremelist.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordExtremeList))
+ - [bots.discordlabs.org](https://bots.discordlabs.org) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordLabs))
+ - [discordlistology.com](https://discordlistology.com) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.DiscordListology))
+ - [lbots.org](https://lbots.org) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.LBots))
+ - [listmybots.com](https://listmybots.com) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.ListMyBots))
+ - [mythicalbots.xyz](https://mythicalbots.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.MythicalBots))
+ - [space-bot-list.xyz](https://space-bot-list.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.SpaceBotsList))
+ - [topcord.xyz](https://topcord.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.TopCord))
+ - [top.gg](https://top.gg) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.TopGG))
+ - [wonderbotlist.com](https://wonderbotlist.com) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.WonderBotList))
+ - [yabl.xyz](yabl.xyz) ([docs](https://dbots.readthedocs.io/en/latest/api.html#dbots.YABL))
+
+### Adding Custom Services
+You can add custom services by extending from the base service class (`dbots.Service`) and overriding the `_post` and `aliases` method.
+Make sure to add the custom service class to the service keymap. (`dbots.Service.SERVICE_KEYMAP`) An example of adding a custom service can be shown [here](/examples/custom_service.py).
+
+### Adding a custom post function
+You can add a custom post event by defining `on_custom_post` in the initialization of a Poster.
+This function can be used when executing `poster.post('custom')` and when all services are being posted to.
+An example of adding a custom post function can be shown [here](/examples/custom_post.py).
+
+## Contribution
+Any contribution may be useful for the package! Make sure when making issues or PRs that the issue has not been addressed yet in a past issue/PR.
+
+## Other Links
+- [PyPi](https://www.pypi.org/project/dbots)
+- [Libraries.io](https://libraries.io/pypi/dbots)
+- [Documentation](https://dbots.readthedocs.io/en/latest/index.html)
+- [dbots Github Organization](https://github.com/dbots-pkg)
+
+%prep
+%autosetup -n dbots-4.0.0
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-dbots -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Fri May 05 2023 Python_Bot <Python_Bot@openeuler.org> - 4.0.0-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..f9f081a
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+707307b24669304de4700cc9bd37b1ac dbots-4.0.0.tar.gz