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 )