Skip to content
Advertisement

discord bot command runs, but gets stuck trying to multiply

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.

User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement