Seite 1 von 1

Skript führt nur einen Befehl anstatt mehrere aus

Verfasst: Donnerstag 24. Mai 2018, 20:28
von Bumblebee38
Hallo,

Ich habe ein Skript für einen Discord Bot geschrieben. Jedoch führt dieser nur einen Befehl aus, anstatt mehrere auszuführen.

Code: Alles auswählen

import discord
import random
import aiohttp
from discord import Game
from discord.ext.commands import Bot
import asyncio


BOT_PREFIX = ("?", "!")

client = Bot(command_prefix=BOT_PREFIX)

@client.command(name='8ball',
                description="Answers a yes/no question.",
                brief="Answers from the beyond.",
                aliases=['eight_ball', 'eightball', '8-ball'],
                pass_context=True)
async def eight_ball(context):
    possible_responses = [
        'That is a resounding no',
        'It is not looking likely',
        'Too hard to tell',
        'It is quite possible',
        'Definitely',
    ]
    await client.say(random.choice(possible_responses) + ", " + context.message.author.mention)


@client.command()
async def square(number):
    squared_value = int(number) * int(number)
    await client.say(str(number) + " squared is " + str(squared_value))


@client.event
async def on_ready():
    await client.change_presence(game=Game(name="mit Bumblebee38"))
    print("Logged in as " + client.user.name)


@client.command()
async def bitcoin():
    url = 'https://api.coindesk.com/v1/bpi/currentprice/BTC.json'
    async with aiohttp.ClientSession() as session:  # Async HTTP request
        raw_response = await session.get(url)
        response = await raw_response.json(content_type='application/javascript')
        await client.say("Bitcoin price is: $" + response['bpi']['USD']['rate'])


@client.event
async def on_message(message):
    if message.content == "!drive":
        userID = message.author.id
        if message.author.id == "#USER-TOKEN":
            await client.send_message(message.channel, "Du kannst schlecht Auto fahren!")
        else:
            await client.send_message (message.channel, "Du kannst gut Auto fahren!")


@client.event
async def on_message(message):
    if message.content == "!hunger":
        userID = message.author.id
        if message.author.id == "#USER-TOKEN":
            await client.send_message(message.channel, "Für dich gibt es essen")
        else:
            await client.send_message (message.channel, "Du bekommst kein essen")


async def list_servers():
    await client.wait_until_ready()
    while not client.is_closed:
        print("Current servers:")
        for server in client.servers:
            print(server.name)
        await asyncio.sleep(600)


client.loop.create_task(list_servers())
client.run("#BOT-TOKEN")
Was muss ich machen, damit dieser mehrere Befehle ausführen kann? Ich kann nämlich immer nur den untersten Befehl ausführen.

Re: Skript führt nur einen Befehl anstatt mehrere aus

Verfasst: Donnerstag 24. Mai 2018, 20:43
von noisefloor
Hallo,

Funktionsnamen etc. sollten einmalig sein. Deine 2. Funktion `on_message` überschreibt die davor stehende sang- und klanglos.

Gruß, noisefloor

Re: Skript führt nur einen Befehl anstatt mehrere aus

Verfasst: Samstag 24. Oktober 2020, 13:41
von tarkov
Was kann man denn sonst noch dort hinschreiben?