turdbot/py/main.py

111 lines
3.3 KiB
Python
Raw Normal View History

2022-10-25 16:21:21 -06:00
# Copyright (c) 2022, Ian Burgess
# All rights reserved.
#
# This source code is licensed under the GPLv3 license. A copy of this license can be found in the LICENSE file in the root directory of this source tree.
2022-10-10 18:22:20 -06:00
import discord
2022-10-19 10:58:37 -06:00
import random
2022-10-10 18:22:20 -06:00
import datetime
2022-10-25 16:21:21 -06:00
import datetime
import shelve
import backports.zoneinfo as zoneinfo
2022-11-08 14:39:10 -07:00
from storage import config
import version
2022-10-25 17:14:44 -06:00
from discord import app_commands
2022-10-10 18:22:20 -06:00
from discord.ext import tasks, commands
2022-10-19 10:58:37 -06:00
2022-11-08 14:39:10 -07:00
def run():
quotetime = datetime.time(hour=12, tzinfo=zoneinfo.ZoneInfo("MST"))
avgtimelst = []
token = open("TOKEN", "r").read()
intents = discord.Intents.all()
bot = commands.Bot(intents=intents, command_prefix=".")
# on ready
@bot.event
async def on_ready():
print('logged in as {0.user}'.format(bot))
print("discord.py version",discord.__version__)
print("turdbot version",version.local())
if not dailyquote.is_running():
dailyquote.start()
@bot.hybrid_command(name="eee", with_app_command=True)
async def foo(ctx):
for guild in bot.guilds:
await ctx.send(guild.id)
# main event
@bot.event
async def on_message(message):
# defining variables
msg = str(message.content)
channel = str(message.channel.id)
server = message.guild.id
author = str(message.author)
# reply to bots
if message.author.bot and config("replytobot") == "false":
return
# start event timer
print("\n start client.event")
start = datetime.datetime.now()
# triggerbot
if config("triggerbotenabled") == "true":
x = 0
found = "false"
triggers = config("triggerbottriggers", db="data")
while x < len(triggers) and found == "false":
if triggers[x] not in msg:
x = x+1
elif triggers[x] in msg:
found = "true"
replys = config(triggerbotreplys, db=data)
rand = random.randint(0, len(replys))-1
await message.channel.send(replys[rand])
else:
print("something happened")
# daily quote
if channel == config("quotequeue") and config("quotebotenabled") == "true":
file = open("data/quotes.var", "a")
file.write(msg)
file.write(":")
file.close()
# bot commands
await bot.process_commands(message)
# end function timer
end = datetime.datetime.now()
eventime = (end - start)
microseconds = eventime.microseconds
avgtimelst.append(microseconds)
avgtime = sum(avgtimelst) / len(avgtimelst)
print("\n end client.event \n microseconds: " +
str(microseconds) + "\n average time: " + str(avgtime))
@tasks.loop(time=quotetime, reconnect=True)
async def dailyquote():
if config("quotebotenabled") == "true":
file = open("data/quotes.var", "r+")
list = file.read().split(":")
rand = random.randint(0, (len(list)-1))
print(rand)
channel = bot.get_channel(int(quotebotconf["config"]["dailyquote"]))
await channel.send(list.pop(rand))
file.write(":".join(list))
file.close()
bot.run(token)