Transfer to Gitea
This commit is contained in:
commit
be4ac63db7
|
@ -0,0 +1,2 @@
|
|||
.idea/
|
||||
__pycache__/
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2021 Karlik Jiri
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
|
@ -0,0 +1,211 @@
|
|||
<!--
|
||||
*** Thanks for checking out the Best-README-Template. If you have a suggestion
|
||||
*** that would make this better, please fork the repo and create a pull request
|
||||
*** or simply open an issue with the tag "enhancement".
|
||||
*** Thanks again! Now go create something AMAZING! :D
|
||||
***
|
||||
***
|
||||
***
|
||||
*** To avoid retyping too much info. Do a search and replace for the following:
|
||||
*** github_username, repo_name, twitter_handle, email, project_title, project_description
|
||||
-->
|
||||
|
||||
|
||||
|
||||
<!-- PROJECT SHIELDS -->
|
||||
<!--
|
||||
*** I'm using markdown "reference style" links for readability.
|
||||
*** Reference links are enclosed in brackets [ ] instead of parentheses ( ).
|
||||
*** See the bottom of this document for the declaration of the reference variables
|
||||
*** for contributors-url, forks-url, etc. This is an optional, concise syntax you may use.
|
||||
*** https://www.markdownguide.org/basic-syntax/#reference-style-links
|
||||
-->
|
||||
[![Contributors][contributors-shield]][contributors-url]
|
||||
[![Forks][forks-shield]][forks-url]
|
||||
[![Stargazers][stars-shield]][stars-url]
|
||||
[![Issues][issues-shield]][issues-url]
|
||||
[![MIT License][license-shield]][license-url]
|
||||
[![LinkedIn][linkedin-shield]][linkedin-url]
|
||||
|
||||
|
||||
|
||||
<!-- PROJECT LOGO -->
|
||||
<br />
|
||||
<p align="center">
|
||||
<a href="https://github.com/github_username/repo_name">
|
||||
<img src="images/logo.png" alt="Logo" width="100%">
|
||||
</a>
|
||||
|
||||
<h3 align="center">RandBot</h3>
|
||||
<h2>PROJECT DISCONTINUED due to lack of interest</h2>
|
||||
|
||||
<p align="center">
|
||||
Discord bot randomizer. Users can create a list that is stored in MongoDB and the bot can select a random item from this list.
|
||||
·
|
||||
<a href="https://github.com/karlji/RandBot-Discord-Randomizer/issues">Report Bug</a>
|
||||
·
|
||||
<a href="https://github.com/karlji/RandBot-Discord-Randomizer/issues">Request Feature</a>
|
||||
</p>
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
<!-- TABLE OF CONTENTS -->
|
||||
<details open="open">
|
||||
<summary><h2 style="display: inline-block">Table of Contents</h2></summary>
|
||||
<ol>
|
||||
<li>
|
||||
<a href="#about-the-project">About The Project</a>
|
||||
<ul>
|
||||
<li><a href="#built-with">Built With</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#getting-started">Getting Started</a>
|
||||
<ul>
|
||||
<li><a href="#prerequisites">Prerequisites</a></li>
|
||||
<li><a href="#installation">Installation</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#commands">Bot Commands</a></li>
|
||||
<li><a href="#roadmap">Roadmap</a></li>
|
||||
<li><a href="#contributing">Contributing</a></li>
|
||||
<li><a href="#license">License</a></li>
|
||||
<li><a href="#contact">Contact</a></li>
|
||||
</ol>
|
||||
</details>
|
||||
|
||||
|
||||
|
||||
<!-- ABOUT THE PROJECT -->
|
||||
## About The Project
|
||||
|
||||
Discord bot created in Python using [discord.py](https://discordpy.readthedocs.io/).
|
||||
The bot can create custom lists using the ?list command and stores those lists in MongoDB.
|
||||
Those lists can also be deleted using the command ?delete.
|
||||
Bot returns 1 random item from the selected list when command ?random is used.
|
||||
|
||||
The project is now in the beta version. This is the first working version that I am using on my Discord server to randomize drop location in Call of Duty: Warzone.
|
||||
It is currently working, but error handling should be updated and new features can be added. This was a fun project to use on my Discord, but I have decided to share it with others. I am currently hosting the bot as well, so you can also invite the bot to your server instead of running it on your own.
|
||||
|
||||
|
||||
### Built With
|
||||
|
||||
* [Python](https://www.python.org/)
|
||||
* [MongoDB](https://www.mongodb.com/)
|
||||
|
||||
|
||||
|
||||
<!-- GETTING STARTED -->
|
||||
## Getting Started
|
||||
|
||||
|
||||
Download the repository and create the MongoDB Atlas database. More details in the Installation section.
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- [Python 3](https://www.python.org/)
|
||||
- Following Python modules are needed. I recommend installing them with [pip](https://pip.pypa.io/en/stable/installing/):
|
||||
- [discord](https://discordpy.readthedocs.io/)
|
||||
- [pymongo](https://pymongo.readthedocs.io/)
|
||||
- [asyncio](https://docs.python.org/3/library/asyncio.html)
|
||||
- [dnspython](https://www.dnspython.org/)
|
||||
- [MongoDB Atlas](https://www.mongodb.com/cloud/atlas) - There is free database option. I am currently using following DB structure "bot.lists", which is also part of the code in commands.py. It can be changed there:
|
||||
```sh
|
||||
db = clientDB.bot
|
||||
collection = db.lists
|
||||
```
|
||||
|
||||
|
||||
### Installation
|
||||
|
||||
1. Clone the repo
|
||||
```sh
|
||||
git clone https://github.com/karlji/RandBot-Discord-Randomizer.git
|
||||
```
|
||||
2. Create Discord bot on [Discord Developer Portal](https://discord.com/developers/docs/intro) & store the bot token to tokens.py
|
||||
- <img src="images/discord_token.png" alt="Logo" width="150px">
|
||||
4. Create [MongoDB Atlas cluster](https://www.mongodb.com/cloud/atlas) with DB structure "bot.lists", Document structure visible below, add IP adress of your bot machine, copy "connection string" to tokens.py
|
||||
- <img src="images/mongo_token.png" alt="Logo" width="600px">
|
||||
- <img src="images/mongo_document.png" alt="Logo" width="600px">
|
||||
5. Run randbot.py
|
||||
6. Create OAuth2 link on [Discord Developer Portal](https://discord.com/developers/). Options "bot" and "send messages" should be enough. This link can be used to invite bot to Discord servers.
|
||||
- <img src="images/oauth.png" alt="Logo" width="600px">
|
||||
|
||||
|
||||
<!-- COMMANDS -->
|
||||
## Commands
|
||||
|
||||
Following commands are available:
|
||||
|
||||
- ?commands
|
||||
- Lists all available commands.
|
||||
- ?list {ListName}
|
||||
- Creates new list.
|
||||
- ?shuffle {ListName}
|
||||
- Randomly selects one item from list.
|
||||
- ?delete {ListName}
|
||||
- Deletes existing list.
|
||||
- ?showlists
|
||||
- Shows existing lists.
|
||||
- ?yesno
|
||||
- Randomly answers Yes/No.
|
||||
- ?8ball
|
||||
- Answers like The Magic 8 Ball.
|
||||
|
||||
|
||||
<!-- ROADMAP -->
|
||||
## Roadmap
|
||||
|
||||
See the [open issues](https://github.com/github_username/repo_name/issues) for a list of proposed features (and known issues).
|
||||
|
||||
|
||||
|
||||
<!-- CONTRIBUTING -->
|
||||
## Contributing
|
||||
|
||||
Contributions are what makes the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.
|
||||
|
||||
1. Fork the Project
|
||||
2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)
|
||||
3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)
|
||||
4. Push to the Branch (`git push origin feature/AmazingFeature`)
|
||||
5. Open a Pull Request
|
||||
|
||||
|
||||
|
||||
<!-- LICENSE -->
|
||||
## License
|
||||
|
||||
Distributed under the MIT License. See `LICENSE` for more information.
|
||||
|
||||
|
||||
|
||||
<!-- CONTACT -->
|
||||
## Contact
|
||||
|
||||
Jiri Karlik- [Linkedin](https://www.linkedin.com/in/jiri-karlik/)
|
||||
|
||||
Project Link: [https://github.com/karlji/RandBot-Discord-Randomizer](https://github.com/karlji/RandBot-Discord-Randomizer)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- MARKDOWN LINKS & IMAGES -->
|
||||
<!-- https://www.markdownguide.org/basic-syntax/#reference-style-links -->
|
||||
[contributors-shield]: https://img.shields.io/github/contributors/karlji/RandBot-Discord-Randomizer.svg?style=for-the-badge
|
||||
[contributors-url]: https://github.com/karlji/RandBot-Discord-Randomizer/graphs/contributors
|
||||
[forks-shield]: https://img.shields.io/github/forks/karlji/RandBot-Discord-Randomizer.svg?style=for-the-badge
|
||||
[forks-url]: https://github.com/karlji/RandBot-Discord-Randomizer/network/members
|
||||
[stars-shield]: https://img.shields.io/github/stars/karlji/repo.svg?style=for-the-badge
|
||||
[stars-url]: https://github.com/karlji/RandBot-Discord-Randomizer/stargazers
|
||||
[issues-shield]: https://img.shields.io/github/issues/karlji/RandBot-Discord-Randomizer.svg?style=for-the-badge
|
||||
[issues-url]: https://github.com/karlji/RandBot-Discord-Randomizer/issues
|
||||
[license-shield]: https://img.shields.io/github/license/karlji/RandBot-Discord-Randomizer.svg?style=for-the-badge
|
||||
[license-url]: https://github.com/karlji/RandBot-Discord-Randomizer/blob/master/LICENSE.txt
|
||||
[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge&logo=linkedin&colorB=555
|
||||
[linkedin-url]: https://www.linkedin.com/in/jiri-karlik/
|
|
@ -0,0 +1,157 @@
|
|||
import random
|
||||
import json
|
||||
import asyncio
|
||||
import pymongo
|
||||
import messages as mes
|
||||
import tokens as tok
|
||||
import time
|
||||
|
||||
clientDB = pymongo.MongoClient(tok.mongo_token)
|
||||
db = clientDB.bot
|
||||
|
||||
|
||||
# Base class for other exceptions
|
||||
class Error(Exception):
|
||||
pass
|
||||
|
||||
|
||||
# Raised when the list format is wrong
|
||||
class ListFormatError(Error):
|
||||
pass
|
||||
|
||||
|
||||
class ListExistsError(Error):
|
||||
pass
|
||||
|
||||
|
||||
async def list_command(client, message):
|
||||
server_name = message.guild.name
|
||||
collection = db[server_name]
|
||||
list_name = message.content.replace('?list ', '')
|
||||
title = "Creating list: " + list_name
|
||||
full_user = message.author.name + "#" + message.author.discriminator
|
||||
await message.channel.send(embed=mes.list_message(title))
|
||||
|
||||
try:
|
||||
def check(m):
|
||||
# checking if awaited message is from the same user that used the command
|
||||
if full_user == m.author.name + "#" + m.author.discriminator:
|
||||
# checking if user input contains ; ... else returning Format error
|
||||
if m.content.find(";") != -1:
|
||||
return True
|
||||
else:
|
||||
raise ListFormatError
|
||||
else:
|
||||
return False
|
||||
|
||||
if collection.find_one({"User": full_user, "List_Name": list_name}, {"List": 1, "_id": False}) is None:
|
||||
message = await client.wait_for('message', timeout=60.0, check=check)
|
||||
else:
|
||||
raise ListExistsError
|
||||
# Format error + timeout error
|
||||
except asyncio.TimeoutError:
|
||||
await message.channel.send(embed=mes.timeout_message())
|
||||
except ListFormatError:
|
||||
await message.channel.send(embed=mes.format_error_message())
|
||||
except ListExistsError:
|
||||
await message.channel.send(embed=mes.list_exists_error_message())
|
||||
|
||||
# if no errors occurred, create new list
|
||||
else:
|
||||
now = int(time.time())
|
||||
collection.insert_one(
|
||||
{"User": full_user, "List_Name": list_name, "List": message.content, "Timestamp": now})
|
||||
title = list_name + " created!"
|
||||
await message.channel.send(embed=mes.list_created_message(title))
|
||||
return
|
||||
|
||||
|
||||
async def random_command(message):
|
||||
list_name = message.content.replace('?random ', '')
|
||||
server_name = message.guild.name
|
||||
full_user = message.author.name + "#" + message.author.discriminator
|
||||
# calling randomize function to get random item from list
|
||||
item = randomize(server_name, full_user, list_name)
|
||||
await message.channel.send(embed=mes.random_message(item))
|
||||
return
|
||||
|
||||
|
||||
async def delete_command(message):
|
||||
list_name = message.content.replace('?delete ', '')
|
||||
server_name = message.guild.name
|
||||
collection = db[server_name]
|
||||
full_user = message.author.name + "#" + message.author.discriminator
|
||||
collection.delete_one({"User": full_user, "List_Name": list_name})
|
||||
title = list_name + " deleted!"
|
||||
await message.channel.send(embed=mes.delete_message(title))
|
||||
return
|
||||
|
||||
|
||||
async def commands_command(message):
|
||||
await message.channel.send(embed=mes.commands_message())
|
||||
return
|
||||
|
||||
|
||||
# retrieving random item from list
|
||||
def randomize(server_name, full_user, list_name):
|
||||
collection = db[server_name]
|
||||
# query based on listname & username
|
||||
output = collection.find_one({"User": full_user, "List_Name": list_name}, {"List": 1, "_id": False})
|
||||
# adding timestamp of the latest use to the list
|
||||
now = int(time.time())
|
||||
timestamp = {"$set": {"Timestamp": now}}
|
||||
collection.update_one(output, timestamp)
|
||||
# formatting the query output
|
||||
output = json.dumps(output)
|
||||
output = output.replace('{"List": "', '')
|
||||
output = output.replace('"}', '')
|
||||
output = output.split(";")
|
||||
# selecting random item from the output
|
||||
output = random.choice(tuple(output))
|
||||
# check for when query returns null
|
||||
if output == "null":
|
||||
output = "List not found!"
|
||||
return output
|
||||
|
||||
|
||||
async def eightball_command(message):
|
||||
answers = ("It is certain.", "It is decidedly so.", "Without a doubt.", "Yes – definitely.", "You may rely on it.",
|
||||
"As I see it, yes.", "Most likely.", "Outlook good.", "Yes.", "Signs point to yes.",
|
||||
"Reply hazy, try again.", "Ask again later.", "Better not tell you now.", "Cannot predict now.",
|
||||
"Concentrate and ask again.", "Don't count on it.", "My reply is no.", "My sources say no.",
|
||||
"Outlook not so good.", "Very doubtful.")
|
||||
item = random.choice(answers)
|
||||
await message.channel.send(embed=mes.random_message(item))
|
||||
return
|
||||
|
||||
|
||||
async def yesno_command(message):
|
||||
answers = ("yes", "no")
|
||||
item = random.choice(answers)
|
||||
await message.channel.send(embed=mes.random_message(item))
|
||||
return
|
||||
|
||||
|
||||
async def clean():
|
||||
col_list = db.list_collection_names()
|
||||
now = int(time.time())
|
||||
difference = now - 2592000
|
||||
|
||||
# Loops through all collections and deletes those that are older than 30 days from now
|
||||
for i in range(len(col_list)):
|
||||
col = col_list[i]
|
||||
collection = db[col]
|
||||
myquery = {"Timestamp": {"$lt": difference}}
|
||||
collection.delete_many(myquery)
|
||||
return
|
||||
|
||||
|
||||
async def print_lists(message):
|
||||
server_name = message.guild.name
|
||||
full_user = message.author.name + "#" + message.author.discriminator
|
||||
collection = db[server_name]
|
||||
query = collection.find({"User": full_user}, {"List_Name": 1, "_id": False})
|
||||
array = list(query)
|
||||
length = len(array)
|
||||
await message.channel.send(embed=mes.print_lists_message(array,length))
|
||||
return
|
Binary file not shown.
After Width: | Height: | Size: 5.8 KiB |
Binary file not shown.
After Width: | Height: | Size: 116 KiB |
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
Binary file not shown.
After Width: | Height: | Size: 19 KiB |
Binary file not shown.
After Width: | Height: | Size: 66 KiB |
|
@ -0,0 +1,142 @@
|
|||
import discord
|
||||
import json
|
||||
|
||||
# List of embeded messages to clean up the code
|
||||
|
||||
def list_message(title):
|
||||
embed = discord.Embed(title=title,
|
||||
description="Please enter your list items separated by ; ",
|
||||
color=0xFF5733)
|
||||
embed.add_field(name="Example", value="Item1;Item2;Item3;Item4", inline=False)
|
||||
embed.add_field(name="Support this project",
|
||||
value="[Donate](https://www.paypal.com/donate?hosted_button_id=QY9QSBC63TL34)",
|
||||
inline=False)
|
||||
return embed
|
||||
|
||||
|
||||
def timeout_message():
|
||||
embed = discord.Embed(title="No list provided within timeout!",
|
||||
description="There is 60s timeout. ",
|
||||
color=0xFF5733)
|
||||
embed.add_field(name="Example", value="Please start again with ?list command.", inline=False)
|
||||
return embed
|
||||
|
||||
|
||||
def format_error_message():
|
||||
embed = discord.Embed(title="Format Error!",
|
||||
description="Use ; separator between items! ",
|
||||
color=0xFF5733)
|
||||
embed.add_field(name="Example", value="Please start again with ?list command.", inline=False)
|
||||
return embed
|
||||
|
||||
|
||||
def list_exists_error_message():
|
||||
embed = discord.Embed(title="List already exists!",
|
||||
description="Please use unique list name.",
|
||||
color=0xFF5733)
|
||||
embed.add_field(name="Example", value="Please start again with ?list command.", inline=False)
|
||||
return embed
|
||||
|
||||
|
||||
def guild_join_message():
|
||||
embed = discord.Embed(title="Thanks for inviting me:",
|
||||
description="Following commands are available:",
|
||||
color=0xFF5733)
|
||||
|
||||
embed.add_field(name="?list {ListName}",
|
||||
value="Creates new list.",
|
||||
inline=False)
|
||||
|
||||
embed.add_field(name="?random {ListName}",
|
||||
value="Randomly selects one item from list.",
|
||||
inline=False)
|
||||
|
||||
embed.add_field(name="?delete {ListName}",
|
||||
value="Deletes existing list.",
|
||||
inline=False)
|
||||
|
||||
embed.add_field(name="?commands",
|
||||
value="Lists all available commands.",
|
||||
inline=False)
|
||||
return embed
|
||||
|
||||
|
||||
def list_created_message(title):
|
||||
embed = discord.Embed(title=title,
|
||||
description="New list created!",
|
||||
color=0xFF5733)
|
||||
embed.add_field(name="Support this project",
|
||||
value="[Donate](https://www.paypal.com/donate?hosted_button_id=QY9QSBC63TL34)",
|
||||
inline=False)
|
||||
return embed
|
||||
|
||||
|
||||
def random_message(item):
|
||||
embed = discord.Embed(title=item,
|
||||
description="[Support this project](https://www.paypal.com/donate?hosted_button_id=QY9QSBC63TL34)",
|
||||
color=0xFF5733)
|
||||
return embed
|
||||
|
||||
|
||||
def delete_message(title):
|
||||
embed = discord.Embed(title=title,
|
||||
description="List deleted!",
|
||||
color=0xFF5733)
|
||||
embed.add_field(name="Support this project",
|
||||
value="[Donate](https://www.paypal.com/donate?hosted_button_id=QY9QSBC63TL34)",
|
||||
inline=False)
|
||||
return embed
|
||||
|
||||
|
||||
def commands_message():
|
||||
embed = discord.Embed(title="Commands:",
|
||||
description="Following commands are available:",
|
||||
color=0xFF5733)
|
||||
|
||||
embed.add_field(name="?commands",
|
||||
value="Lists all available commands.",
|
||||
inline=False)
|
||||
|
||||
embed.add_field(name="?delete {ListName}",
|
||||
value="Deletes existing list.",
|
||||
inline=False)
|
||||
|
||||
embed.add_field(name="?list {ListName}",
|
||||
value="Creates new list.",
|
||||
inline=False)
|
||||
|
||||
embed.add_field(name="?random {ListName}",
|
||||
value="Randomly selects one item from the list.",
|
||||
inline=False)
|
||||
|
||||
embed.add_field(name="?showlists",
|
||||
value="Prints all available lists for the user.",
|
||||
inline=False)
|
||||
|
||||
embed.add_field(name="?yesno",
|
||||
value="Gives Yes or No answer.",
|
||||
inline=False)
|
||||
|
||||
embed.add_field(name="?8ball",
|
||||
value="Gives random 8ball answer.",
|
||||
inline=False)
|
||||
|
||||
return embed
|
||||
|
||||
|
||||
def print_lists_message(array, length):
|
||||
embed = discord.Embed(title="Show all lists",
|
||||
description="Following lists are availible to you:",
|
||||
color=0xFF5733)
|
||||
for i in range(length):
|
||||
item = array[i]
|
||||
item = json.dumps(item)
|
||||
item = item.replace('{"List_Name": "', '')
|
||||
item = item.replace('"}', '')
|
||||
embed.add_field(name=item,
|
||||
value="\u200b",
|
||||
inline=False)
|
||||
embed.add_field(name="Support this project",
|
||||
value="[Donate](https://www.paypal.com/donate?hosted_button_id=QY9QSBC63TL34)",
|
||||
inline=False)
|
||||
return embed
|
|
@ -0,0 +1,54 @@
|
|||
import discord
|
||||
import commands as com
|
||||
import messages as mes
|
||||
import tokens as tok
|
||||
from discord.ext import tasks
|
||||
import datetime
|
||||
|
||||
client = discord.Client()
|
||||
|
||||
|
||||
# Information Embed message when bot joins the server for the first time.
|
||||
@client.event
|
||||
async def on_guild_join(guild):
|
||||
await guild.text_channels[0].send(embed=mes.guild_join_message())
|
||||
|
||||
|
||||
# Information to console when bot successfully logs in the server.
|
||||
@client.event
|
||||
async def on_ready():
|
||||
print('We have logged in as {0.user}'.format(client))
|
||||
|
||||
|
||||
# Reactions to message commands.
|
||||
@client.event
|
||||
async def on_message(message):
|
||||
if message.author == client.user:
|
||||
return
|
||||
elif message.content.startswith('?random'):
|
||||
await com.random_command(message)
|
||||
elif message.content.startswith('?8ball'):
|
||||
await com.eightball_command(message)
|
||||
elif message.content.startswith('?yesno'):
|
||||
await com.yesno_command(message)
|
||||
elif message.content.startswith('?list'):
|
||||
await com.list_command(client,message)
|
||||
elif message.content.startswith('?showlists'):
|
||||
await com.print_lists(message)
|
||||
elif message.content.startswith('?delete'):
|
||||
await com.delete_command(message)
|
||||
elif message.content.startswith('?commands'):
|
||||
await com.commands_command(message)
|
||||
|
||||
|
||||
# daily DB clean loop
|
||||
@tasks.loop(hours=24)
|
||||
async def cleandb():
|
||||
await com.clean()
|
||||
|
||||
print("DB cleaned " + datetime.datetime.utcnow().strftime('%B %d %Y - %H:%M:%S'))
|
||||
|
||||
cleandb.start()
|
||||
|
||||
# Connects the client using Discord bot token
|
||||
client.run(tok.discord_token)
|
|
@ -0,0 +1,4 @@
|
|||
discord
|
||||
pymongo
|
||||
asyncio
|
||||
dnspython
|
Loading…
Reference in New Issue