Python 3 Discord Bot Функция Добавить в себя - PullRequest
0 голосов
/ 19 января 2020

Здравствуйте, я пытаюсь создать команду для бота disord, чтобы при вводе .count он показывал +1, но если я наберу его снова, он покажет +2, а если я наберу его снова, он покажет +3 и др c. если кто-нибудь знает, что делать, дайте мне знать, спасибо, я перепробовал так много вещей, включая

COUNT = 0
def increment():
    global COUNT
    COUNT += 1
increment()

print(COUNT)

, и это не сработало, просто остается 1

ОБНОВЛЕНИЕ: ПРОСТО ПРОБОВАНО

if "!counter" == message.content.lower():
        await message.channel.send
        def get_var_value(filename="store.dat"):
            with open(filename, "a+") as f:
                f.seek(0)
                val = int(f.read() or 0) + 1
                f.seek(0)
                f.truncate()
                f.write(str(val))
                return val
                your_counter = get_var_value()
                print("This script has been run {} times.".format(your_counter))

и хорошо, что это вроде работает само по себе, я не могу заставить его сказать это в чате "Ошибка типа: объектный метод не может быть использован в выражении 'await'", а также он не изменится в зависимости от того, кто когда-либо пользователь, который выполнил команду, был

1 Ответ

1 голос
/ 19 января 2020

Ваша проблема заключается в вашем await message.channel.send Прямо сейчас вы ожидаете самой функции, но вы должны передать ей аргумент, например:

await message.channel.send(counter)

Теперь ваш подход к написанию файла кажется симпатичная solid идея, но мы можем упростить процесс:

if "!counter" == message.content.lower():
    # a try except statement so that we only read the file if it exists and has the correct value
    try: 
        with open("store.dat", "r") as f:
            counter = int(f.read()) # read in the file contents
    except (FileNotFoundError, ValueError):
        counter = 0 # if something goes wrong, we reset the counter

    counter += 1
    await message.channel.send(f"This command has been called {counter} times") # give feedback in the channel
    with open("store.dat", "w") as f:
        f.write(str(counter)) # write the contents back into the file
...