Форум программистов, компьютерный форум, киберфорум
Python: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/40: Рейтинг темы: голосов - 40, средняя оценка - 4.98
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 18
Discord Bot

SyntaxError: 'await' outside function

29.10.2020, 17:09. Показов 8060. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru