MinTnt,
у словарей есть метод update(), который добавляет элементы из другого словаря
Ты можешь использовать генератор словарей вида
{name:getattr(m, name) for name in dir(m)}
чтобы получить все элементы из модуля m
А чтобы сделать "как бы присваивание" для m, можно использовать лямбду.
(lambda m: d.update( {name:getattr(m, name) for name in dir(m)} ))(__import__('glob'))
Для меня сработало именно так.
Пиши бота, но только имей в виду две вещи:
1. бот должен работать от обычной клиентской учётки, а не от специальной ботовой. discord.py вроде такое умеет.
2. За работу ботов от клиентских учёток могут забанить, а за спам - наверняка.
yegoryakubovich, скорее всего, речь о правах доступа к файлу.
Если все файлы, к которым получает доступ бот, находятся в одном каталоге, то тогда можно сделать так: chown -R bot-user:bot-user /bot/dir/name
где bot-user - имя пользователя бота, а /bot/dir/name - каталог где он лежит.
ВНИМАНИЕ: эта команда поменяет права доступа на весь каталог и всё что в нём лежит! Не делай в /usr/bin.
Я бы посоветовал создать для бота отдельный каталог внутри /opt, а не кидать его в /usr.
Также попробуй наладить логгирование, чтобы видеть на что бот ругается.
Ответ сильно зависит от условий.
Сколько таких объектов может быть на экране?
Всегда ли объект одного цвета?
Всегда ли объект одного размера?
Всегда ли объект появляется в одной ориентации?
Насколько сложна форма объекта?
Насколько сложен фон вокруг объекта? Т.е. контрастный одноцветный фон, малоконтрастный примерно одноцветный, сложный фон, и т.д.
Это не выглядит как проблема systemd, сам бот аварийно завершается.
Если запустить бота вручную, от того же пользователя, с теми же параметрами, из того же каталога - работает?
Ну учитывая что средствами одного дискорда это сделать нельзя (иначе ботов не писали бы)... не всё ли равно? К тому же я дал ссылку на одно из готовыъ решений.
А точно от вашего лица? Если кликнуть по имени автора сообщения, то во всплывашке был логин и id от вашей учётки, или посторонней?
Потому что проще всего - посмотреть у кого права owner на сервер, дождаться, пока он уйдёт оффлайн, а потом сменить ник и аватарку на такую же и уже тогда писать.
Учите основы асинхронного программирования в целом.
Это не такая штука, которую можно взять и прикрутить сбоку, всю программу придётся проектировать исходя из асинхронного подхода.
Что имеет смысл, только если у вас в программе есть достаточно много параллельно выполняемых независимых задач, которые в основном завязаны на ввод-вывод.
Т.е., скажем, сетевой сервер так писать имеет смысл. А небольшую утилиту на одного пользователя - едва ли.
Примеры кода приводить не хочу, честно говоря. Тут пример = написать весь код.
2. Очень коротко: не используй time.sleep(delay), только await asyncio.sleep(delay).
Подлиннее: discord.py работает по асинхронной модели. Т.е. приходит событие, вызывается указанная тобой функция. Она что-то считает, затем, делает ввод/вывод - скажем, отправляет сообщение. Так вот пока сообщение отправляется, функция приостановлена, и может выполняться какая-то другая функция, для обработки другого события. И вот так функции передают друг другу управление по очереди, чтобы процессор не простаивал.
Почему это важно. Просто time.sleep() ничего об этом не знает, а потому с точки зрения discord.py твоя функция во время слипа занята чем-то важным. Соотв. управление она не отдаёт, и весь бот висит и ждёт. Нехорошо.
asyncio.sleep() знает о происходящем, и когда одна функция делает await asyncio.sleep(delay), то какая-то другая получит управление на это время.
3. Чего тут не понимать? Вместо фиксированной задержки типа await asyncio.sleep(1000)
делаешь рандомную типа
#равномерно распределённое значение от 1 до 100
delay = random.uniform(1, 100)
await asyncio.sleep(delay)
Если я правильно читаю условие:
a[k] < a[k-1] + a[k] + 1/2
т.е.
0 < a[k-1] + 1/2
a[k-1] > -1/2
Для натуральных чисел любой член последовательности будет удовлетворять этому условию.
Что-то тут не так.
было value_type = IntVar()
стало self.value_type = IntVar()
Разница видна?
Только что же переделали value_type из локальной переменной в методе-конструкторе __init__ в поле экземпляра класса. Неужели не догадаться, что нужно и везде в __init__ заменить обращения к value_type соответственно?
А переделали для того, чтобы к этой переменной можно было достучаться из других методов класса, в т.ч. из select_value_type().
Это основы ООП, чем локальная переменная отличается от поля класса и т.п.