Adminx1, ну насчёт перекрашивания я написал выше.
Изменение размеров - тоже не такая уж проблема, только надо решить, как подгонять соотношение сторон. Тут либо обрезка, либо дополнение каким-то цветом.
1. сайт как-то обнаруживает разницу между селениумом, и обычным браузером. Можно начать с простых вещей, например, попробовать другой движок браузера, проверить User-Agent, и т.п.
2. А просто через браузер зайти удаётся? Может, по IP забанили?
AinzO, если с чужого, куда вашего бота не пригласят - используйте класс Client вместо Bot.
Он позволяет передать токен клиента вместо токена бота.
Токен клиента вроде как можно раздобыть, залогинившись от юзера через сайт и посмотрев запросы, которые делает браузер.
shinodaaa, А зачем ты слил вместе два цикла?
Цикл создания звёзд должен быть один, до цикла анимации.
Да и потом ерунда. Сто раз очищаешь экран? У тебя цикл по stars уже снаружи цикла по step.
Проверяй отступы, они в питоне значимы.
for step in range(100): #сколько кадров анимации сделать
turtle.clear() #тут нужно очистить экран
for star in stars: #перебираем звезды
Илья, не совсем.
Начало диапазона - длина l минус 1, т.е. последний элемент.
Шаг диапазона - минус 1, т.е. перебираем от больших к меньшим.
Конец диапазона - минус 1, но так как конец не включается в диапазон, то фактически остановимся на предыдущем значении, т.е. 0.
Просто введи в консоль питона list(range(10, -1, -1)), и увидишь.
Не понял - учись.
Сначала основы Питона, набросай хотя бы программу, где можно в консоль с клавиатуры ввести число, а она проведёт нужный расчёт.
Потом, как освоишь - простого бота, который на любое сообщение отвечает "привет". Это обычно есть в примерах.
Потом скомбинируй две программы.
Хоть бы язык/библиотеку написал. Я уж понимаю, что в гугле забанили, но без этого непонятно, на что ссылки кидать.
Впрочем, готовый код вряд ли найдется.
MinTnt, это вариант, но я вообще-то имел ввиду несколько другой аспект.
Когда ты дописываешь что-то в конец строки, что делает питон?
Выделяет память под новую строку (суммарной длины), потом копирует туда исходную строку, потом копирует туда дописываемую часть. Если исходная строка более не нужна, удаляет её. (это упрощение, но идею передаёт).
И так при каждом дописывании. Т.е. если ты к 100МБ строке дописываешь один символ, у тебя в какой-то момент будет занято два раза по 100МБ, а если дописываешь символы часто - то память будет постоянно выделяться/освобождаться.
А вот join() работает умнее. Если он может пройтись по списку строк, он это делает, суммирует их длины, выделяет блок нужного размера, и вторым проходом записывает содержимое в этот блок. Никаких многократных переносов, по крайней мере для списка строк.
Понятно, что на маленьких строках это не принципиально, но файлы имеют тенденцию разрастаться... поэтому в некоторых случаях может иметь смысл сразу использовать более эффективные инструменты. Просто на всякий пожарный.
Михаил,
Раз уж ты читаешь файл целиком в память, можно было использовать список строк, и сделать ''.join() (ну или '\n'.join()). Я думаю, это будет побыстрее.
TanderOFF, да какой тут гайд.
Просто создаёшь новый питоновский файл, в нём объявляешь переменную.
Потом импортируешь его обычным способом и в главном файле, и в extension.
Вот и всё.
TanderOFF, тогда есть два варианта.
1. вынеси этот словарь в отдельный модуль, и импортируй его там, где он требуется.
2. Унаследуйся от Bot и добавь свой словарь в класс-потомок, чтобы достать его внутри setup().
TanderOFF, так, хорошо. Выглядит правильно. Если ты выполняешь
client.add_cog(voice(client, tdict))
В этом же файле, то оно должно попасть в конструктор класса.
Если не работает, приведи полный текст ошибки.
TanderOFF, ты не понял.
"почему ты его определяешь при on_ready, если он всё равно пустой? Что тебе мешает определить его при старте программы?"
На момент добавления когов on_ready() ещё не отработал, и словаря у тебя нет.
Почему просто не написать в главном файле tdict = {}?
Тогда он уже будет существовать в этот момент.
TanderOFF,
Ну ты же не показал, где у тебя происходит
client.add_cog(voice(client))
так откуда я знаю?
client.add_cog(voice(client, tdict)) должно сработать... при условии этот tdict уже определён к тому моменту, как ты создаёшь cog.
К слову, а почему ты его определяешь при on_ready, если он всё равно пустой? Что тебе мешает определить его при старте программы?
ODNik, я почитал поподробнее - увы, raw не подойдёт. В доках написано, что если данные при передаче сжаты gzip (HTTP это позволяет, а request умеет разжимать), то content даст разжатый поток, а raw - сжатый. Так что лучше остановиться на способе 1, он даже в доках на requests есть (да, прямо пример с PIL).
Изменение размеров - тоже не такая уж проблема, только надо решить, как подгонять соотношение сторон. Тут либо обрезка, либо дополнение каким-то цветом.