everything works fine, it prints the multiplication but it gets stuck on adding more coins to the server, it worked ok until I added the multiplier
import discord import random from discord.ext import commands client = commands.Bot(command_prefix = 's!') servermultiplier = 1 servercoins = 0 @client.event async def on_ready(): global servercoins, servermultiplier file1 = open("C:/Users/squid/Documents/Stuff/ok/save.txt", 'r') count = 0 result = [] for line in file1: count += 1 result.append( line.strip()) servercoins = result[0] serermultiplier = result[1] print(servercoins) print('Bot is ready!') channel = client.get_channel(id=864049237679538189) @client.command(aliases=['8ball', '8b', 'eb']) async def eightball(ctx, *, question): responses = ['no', 'kinda', 'i guess?', 'yes', '100%', 'absolutely not', 'what are you dumb?', 'sure', 'totaly'] await ctx.send(f'Question: {question}nAnwser: {random.choice(responses)}') @client.command(aliases=['b','money','cash','bal']) async def balance(ctx): await ctx.send(f'Server has: **${servercoins}**') @client.command(aliases=['give']) async def givemoney(ctx): global servercoins, servermultiplier print('give', 1 * servermultiplier) #<- prints fine servercoins += 1 * servermultiplier #<- hangs here #anything below here doesnt work #vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv print('given') await ctx.send(f'Server now has: **${servercoins}**')
any help is appreciated (typing random stuff because my post is mostly code and i need to put these edits but stack overflow is being rude so yeah)
Advertisement
Answer
Initially, you set
servermultiplier = 1 servercoins = 0
but then modified it into a string in on_ready
:
for line in file1: count += 1 result.append( line.strip()) servercoins = result[0] serermultiplier = result[1] # note that there's a typo here
Here, result
is a list of strings, so servercoins
is set to a string. (This is why globals are bad!)
You later try to add it servercoins += 1 * servermultiplier
, which is not allowed.
>>> servercoins = '0' >>> servermultiplier = 1 >>> servercoins += 1 * servermultiplier Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate str (not "int") to str
I still don’t know why it causes the code to hang. I would assume that the exception stopped the rest of the command from executing, and then it was silently ignored later on.