Skript führt nur einen Befehl anstatt mehrere aus

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Bumblebee38
User
Beiträge: 2
Registriert: Mittwoch 23. Mai 2018, 20:26

Donnerstag 24. Mai 2018, 20:28

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.
Benutzeravatar
noisefloor
User
Beiträge: 2387
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Donnerstag 24. Mai 2018, 20:43

Hallo,

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

Gruß, noisefloor
Antworten