0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 18
Discord Bot

SyntaxError: 'await' outside function

29.10.2020, 17:09. Показов 8120. Ответов 7

Студворк — интернет-сервис помощи студентам
Здравствуйте. Создаю бота для дискорда на свой сервер. Через документацию к discord.py, я сделал вот такой код:
Python
1
2
3
4
5
6
7
import discord
 
class MyClient(discord.client):
    await main.send('Hello') # "main" - название канала на сервере
 
client = MyClient()
client.run('NzcxMzYwMzk4NzAzOTg0NjYx.X5q_Wg.w00I702euybW-Z2AYSQpHIsfifQ')
Но когда запускаю бота, cmd выдаёт такую ошибку:
Python
1
2
3
4
  File "dsbot.py", line 4
    await main.send('Hello') # "main" - название канала на сервере
    ^
SyntaxError: 'await' outside function
Буду благодарен за помощь.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.10.2020, 17:09
Ответы с готовыми решениями:

Await вложенный в await
Подскажите, вот есть код public class Foo1 { //Body class } public class Foo2:Foo1 { //Body class

Разница между await promise и await promise.all
Столкнулся с непонятной проблемой, если отсылается много параллельных RPC запросов, возникает ответ с ошибкой, типа превышена очередь....

FUN must be a function, a valid string expression, or an inline function object
Здраствуйте, нужна помощь. clear all; close all; Scr_data_C; Scr_data_L; fv = 10:10:10000; Zc = cond(dataC,fv); Zl =...

7
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
29.10.2020, 17:58
Цитата Сообщение от Feefort103 Посмотреть сообщение
Через документацию к discord.py
А документацию Python?

Цитата Сообщение от Feefort103 Посмотреть сообщение
'await' outside function
await можно использовать только внутри функции или метода.
Причем они должны быть асинхронными.
0
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 18
29.10.2020, 23:50  [ТС]
Дополнил код ещё немного.
Python
1
2
3
4
5
6
7
8
9
10
11
import discord
 
class MyClient(discord.Client):
    async def on_ready(self):
        print('Logged on as {0}!'.format(self.user))
        
    async def on_message(self, message):
        await main.send('Hello') # "main" - название канала на сервере
 
client = MyClient()
client.run('NzcxMzYwMzk4NzAzOTg0NjYx.X5q_Wg.w00I702euybW-Z2AYSQp')
Теперь бот становится онлайн, никаких ошибок не выдаётся. Но вот сообщение он не отправляет. Что делать?

Добавлено через 3 часа 56 минут
Полазив интернет, исправив код, я нашёл рабочий код бота, который отправляет сообщения.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import asyncio
from discord.ext import commands
 
bot = commands.Bot(command_prefix='.')
 
async def background_task():
      time = 5 # 86400
      await asyncio.sleep(time)
      message = 'Hello'
      await bot.get_channel(id_channel).send(message)
 
async def on_ready():
    print('Bot logged as {}'.format(bot.user))
 
 
async def on_message(ctx):
    pass
 
 
token = 'token'
bot.loop.create_task(background_task())
bot.run(token)
На данный момент всё работает, также без ошибок, правда в консоль перестала выводиться информация о том что бот залогинен, но мне это не принципиально. Но бот отправляет сообщение только один раз, а надо чтобы функция background_task повторялась (т.е. чтобы каждые пять секунд отправлялось сообщение).

Добавлено через 36 минут
Возникла ещё одна проблема: у меня имеются несколько значений переменной message. Я хочу сделать так чтобы список этих самых значений располагался в другом файле. Файл создал, а как их объединить (основной файл с кодом бота и файл с списком значений), я незнаю, облазил весь интернет, не нашёл.
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
30.10.2020, 07:36
Feefort103, Мда уж, отличный пример ты нашел, что тут сказать...

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from discord.ext import commands
 
 
bot = commands.Bot(command_prefix="!")
 
 
@bot.event
async def on_ready():
    print(f"Bot logged as {bot.user}")
 
 
@bot.command(name="hello")
async def test_event(ctx: commands.Context):
    await ctx.send(f"Hello, {ctx.author.mention}!")
 
 
bot.run("TOKEN")
0
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 18
30.10.2020, 08:57  [ТС]
DmFat, Так мне и надо чтобы бот отправлял сообщения каждые 5 секунд. Тем более после отправки сообщения я внёс в тот код много нужных мне правок, поэтому остановлюсь на том варианте.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
30.10.2020, 14:39
Цитата Сообщение от Feefort103 Посмотреть сообщение
Но бот отправляет сообщение только один раз, а надо чтобы функция background_task повторялась (т.е. чтобы каждые пять секунд отправлялось сообщение)
Как ты собрался писать бота, если даже не прочитал документацию по discord и не знаешь как работают таймеры?
P.S. Для шедулинга сообщений по таймеру существует расширение: discord-timers
1
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 18
31.10.2020, 15:44  [ТС]
С помощью while True у меня всё получилось.
0
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 18
01.11.2020, 18:29  [ТС]
Ещё пару вопросов: хочу сделать так, чтобы бот отправлял сообщение на разных строках. В интернете нашёл этот метод:
Python
1
2
3
4
5
weather=['''
Первая строка, а рядом с ней дата: 
Вторая строка в этом же сообщении
'''
]
Ещё я импортировал библиотеку datetime. Можно ли сделать так, чтобы на первой строке была ещё дополнительно дата? Если нельзя так сделать, то есть ли другой способ писать на разных строках и ещё рядом писать дату?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.11.2020, 18:29
Помогаю со студенческими работами здесь

Function or interface marked as restricted, or the function uses an Automation type not supported
Добрый день! Столкнулась с неожиданной проблемой: Объявляю переменные для программы глобально. 'Данные заказчика Dim Name...

FUNCTION kinomonster.Now does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manua
Добрый день знатаки, подскажите я не могу понять почему он ругается на название бд.Вот та часть кода: function insert($name,...

FUNCTION new.COUNT does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual
Ругаеться на COUNT , что тут не так ? $result = mysql_query("SELECT COUNT (`model`.`cat_id`) FROM ...

C:\Dev-Cpp\lib\vector.h `ostream' is neither function nor member function; cannot be declared friend
выкидывает C:\Dev-Cpp\lib\vector.h `ostream' is neither function nor member function; cannot be declared friend при компиляции. что делать?

S-function. Как задать переменную, которая будет считать количество обращений к S-function
Пробовал объявить переменную (counter) как global до запуска s-function. Затем в разделе mdlOutputs добавил стоку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru