• Как переслать уведомление windows/chrome в телеграм?

    @zkrvndm
    Софт для автоматизации
    Нужно в консоли открыть контекст расширения и отредактировать метод отсылающий уведомления.

    Потребуется знание JavaScript. Пример функции для отправки уведомлений из браузера в Телеграм:
    async function sendTelegram(send_text) {
    	
    	var chat_id = '-*****************'; // Номер группы Телеграм
    	
    	// Токен, бот должен состоять в группе, куда шлем уведомления:
    	var bot_token = '*******************************************';
    	
    	var url_obj = new URL('https://api.telegram.org/bot'+bot_token+'/sendMessage');
    	url_obj.searchParams.set('time', new Date().getTime());
    	
    	var max_send_count = 3; var send_status = false;
    	
    	do {
    		
    		max_send_count--;
    		
    		try {
    			
    			var response = await (await fetch(url_obj.href, {
    				'method': 'POST',
    				'headers': {
    					'Content-Type': 'application/json; charset=UTF-8'
    				},
    				'body': JSON.stringify({
    					'chat_id': chat_id,
    					'text': send_text,
    					'parse_mode': 'HTML'
    				})
    			})).json();
    			
    			if (response.ok) {
    				
    				send_status = true;
    				
    				console.log('Уведомление успешно отправлено в группу Телеграм:');
    				console.dir(response);
    				
    			}
    			
    			else {
    				
    				console.log('Произошла ошибка при отправке уведомления в группу Телеграм:');
    				console.dir(response);
    				
    				await new Promise(function(s) { setTimeout(s, 1000); });
    				
    			}
    			
    		}
    		
    		catch (err) {
    			
    			console.log('Произошла ошибка при отправке уведомления в группу Телеграм:');
    			console.error(err);
    			
    			await new Promise(function(s) { setTimeout(s, 1000); });
    			
    		}
    		
    	} while (!send_status && max_send_count > 0);
    	
    	if (!send_status) {
    		
    		alert('Не удалось отправить уведомление в Телеграм, детали см. в консоли.');
    		
    	}
    	
    	return send_status;
    	
    }
    Ответ написан
    1 комментарий
  • Почему возникает ошибка "IndentationError: expected an indented block after function definition"?

    Hivemaster
    @Hivemaster
    Админ, который хочет программировать
    может я тупой конечно

    1. С формулированием краткого, но конкретного заголовка вопроса в форме вопросительного предложения не справился.
    2. С редактором текста вопроса не справился.
    3. С поиском по очень распространённой ошибке не справился.

    6344227607336818699807.jpeg
    Ответ написан
    Комментировать
  • На какой cms начать верстать магазин лучше всего?

    pLavrenov
    @pLavrenov
    Разработка сайтов
    Можно разобрать на цитаты из интернетов.... Да и опыта у тебя нет - признавайся, в лучшем случае правки делал какие исходя из текста.

    Joomla мертва и никому не нужна.

    Wordpress это более 60% рынка CMS и 30% от всех сайтов на планете. Выбор очевиден. Про костыли выброси эти фразы в мусорку и никому не говори. У него есть свои минусы но к тому времени когда ты их осознаешь уже будет понимание что с этим делать. И если будешь отталкивать от того как малыми силами сделать сайт на плагинах останешься без работы и без денег. Вордпрес это максимальный профит за короткий срок а если не умеешь готовить то это уже другой вопрос.

    Для начала разберись с пониманием что такое "верстать" и что это не связано с CMS. Разделяй процессы. Сначала верстать потом натягивать.
    Ответ написан
    4 комментария
  • Как облачно запускать программы?

    Держи компьютер включеным и плати за свет
    Ответ написан
    5 комментариев
  • Как лучше сверстать такой блок?

    mizutsune
    @mizutsune
    Frontend Developer
    Ответ написан
    Комментировать
  • Как сделать, чтобы бот ставил автоматически реакцию на новые сообщения?

    Alexandre888
    @Alexandre888 Куратор тега discord.js
    Javascript-разработчик
    и что вызывает затруднения? вы не можете сверить ID двух разных каналов?
    client.on("messageCreate", message => {
      if (message.channel.id === "ID_канала") {
        await message.react("✅");
      }
    });

    на любое сообщение, отправленное в канал с ID "ID_канала", будет автоматически ставится реакция ✅.
    Ответ написан
    2 комментария
  • Как ограничить ресурсы бота (ОЗУ) в discord на python?

    @deliro
    Лимиты теоретически ограничить можно, но практически - не нужно. 1.5 гб для ботика - это овердофига (если только он не обрабатывает десятки тысяч пользователей одновременно). Особенно если он асинхронный (запущен в одном процессе). Правильно - лечить проблему, а не её симптомы. Профилируй, почему у тебя бот столько жрёт. Вероятно, где-то что-то течёт. Плюс в питоне вагон способов уменьшить нагрузку на память от элементарного __slots__ до генераторов и Сишных библиотек

    Ну и как сказал mayton2019, после оптимизации, если это не спасает, нужно начинать горизонтально масштабировать нагрузку.

    Тупо ограничить память - это просто шанс того, что придёт OOM Killer (или его аналог) и прибьёт твоё приложение, когда оно этого не ожидает. Да, есть инструменты, например, в golang, чтобы ограничить потребление памяти, но все они делают ровно одну вещь: управляют параметрами запуска сборщика __мусора__ (то есть, памяти, которая НЕ НУЖНА). На секундочку, протёкшая память не определяется как мусор, ровно как и не является мусором НУЖНАЯ память. Её никакие оптимизаторы не сожмут никакой магией.

    Есть также техника, которая позволяет "костыльно", но быстро и иногда даже эффективно избавляться от утечек памяти, не решая саму причину утечек. Тупо перезапускать воркер после X обработанных запросов, то есть, стартовать новый процесс, перекидывать трафик на него, а старый убивать вместе со всей утёкшей памятью.
    Ответ написан
    2 комментария
  • Как реализовать сортировку без приоритета?

    @Razumov_Timur_from_KZN
    Написать свою функцию сортировки
    Ответ написан
    Комментировать
  • Правильно ли я понял когда ставятся круглые ,а когда квадратные скобки?

    vabka
    @vabka
    Токсичный шарпист
    Списки в квадратных.
    Словари в фигурных.
    Аргументы у функций в круглых.
    Кортежи в круглых.
    Обращение к элементу списка/словаря/кортежа в квадратных.
    Ну и конечно группировка арифметических операций, как и в математике, в круглых.

    Проверить, что ты правильно всё запомнил ты можешь внутри самого python - если нет ошибок синтаксиса и программа работает как ты задумал, значит всё ок.
    Ответ написан
    1 комментарий
  • Как сделать задержку между отправкой сообщений юзербота?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Может я не понимаю задумки, но в чем проблема отправить сообщение для каждого юзера отдельно?
    И да, судя по тому, что вы добавляете синхронную функцию в асинхронного бота, притом функцию которая фактически блокирует выполнение кода, вам бы основы подтянуть - до ботов вам еще далеко.
    Ответ написан
    Комментировать
  • Насколько такой метод проверки является корректным и как его можно сократить?

    Vindicar
    @Vindicar
    RTFM!
    1. Не надо проверять в рантайме type(m) == int. Достаточно указать в заголовке функции
    def add_time(self, h: int = 0, m: int = 0, d: int = 0, dw: int = 0, mh: int = 0, y: int = 0):

    Этого будет достаточно, чтобы IDE/статический анализатор сказал программисту "эй, ты фигню передаёшь в этот метод". Да, это не будет контролироваться во время выполнения, но тут уже другой вопрос: если клиент-программист сделал класс, неотличимый от int, стоит ему позволить этот класс передать вместо int. Ответственность будет на нём.

    2. Ну для конкретно твоей проверки по значению можно просто:
    if any(v < 0 for v in [h,m,d,dw,mh,y]):
        raise ValueError()

    Если хочешь красиво, можно и выпендриться:
    args = {'h':h, 'm':m, 'd':d, 'dw':dw, 'mh':mh, 'y':y}
    bad = list(filter(lambda k: args[k] < 0, args.keys()))
    if bad:
        raise ValueError('Invalid values for: ' + ','.join(bad))


    Ну а при большом желании можно и целый велосипед для декларативной проверки параметров замутить.
    Но смысл?
    import functools
    import inspect
    
    # пусть чек-функция имеет вид (value) -> bool, и возвращает True для "хороших" значений. Пример:
    def not_whitespace(s: str) -> bool:
        'String must not contain only whitespace'  # док строка будет использоваться в сообщении об ошибке
        return bool(s.strip())  # проверяем что строка не состоит из одних пробелов.
    # чек-функции можно генерировать и на ходу:
    def in_range(low, high):
        def check(value):
            return (low is None or low <= value) and (high is None or value <= high)
        check.__doc__ = f'Value must be between {low} and {high}.'
        return check
    # теперь сделаем декоратор, который умеет принимать чек-функции и применять их перед вызовом цели
    def check(**checks):
        def wrapper(func):
            sign = inspect.signature(func)
            names = list(sign.parameters.keys())  # имена параметров по порядку
            not_found = set(checks.keys()) - set(names)  # все ли чеки ссылаются на известные параметры?
            if not_found:
                # у нас есть чек на неизвестный параметр!
                raise NameError(', '.join(not_found))
            # всё ок, делаем обёртку над функцией
            
            @functools.wraps(func)
            def wrapped(*args, **kwargs):
                bad = []
                for param_name, check_func in checks.items():
                    idx = names.index(param_name)
                    if idx < len(args):
                        # параметр был передан через args
                        value = args[idx]
                        if not check_func(value):  # вызываем чек-функцию
                            err = getattr(check_func, '__doc__', '')
                            if err:
                                bad.append(f'{param_name} ({err})')
                            else:
                                bad.append(param_name)
                    else:
                        pass  # могут быть хитрости с kwargs-only параметрами. Тут уж извини, мне влом писать.
                if bad:  # нашли ошибки?
                    raise ValueError('Bad value for parameters: '+', '.join(bad))
                    # тут ещё можно помудрить над скрытием последнего фрейма в traceback, но мне опять влом
                else:  # не нашли, вызываем функцию
                    return func(*args, **kwargs)
            
            return wrapped
        return wrapper
    
    # пример использования
    # строка должна быть не из одних пробелов
    # число должно быть в пределах от 1 до 10 включительно
    @check(s=not_whitespace, n=in_range(1, 10))
    def repeat(s: str, n: int) -> str:
        return s * n
    
    print(repeat('test ', 3))
    
    try:
        print(repeat('test ', 20))
    except ValueError as err:
        print('yep! it failed!', err)
    
    try:
        print(repeat('test ', -1))
    except ValueError as err:
        print('yep! it failed!', err)
    
    try:
        print(repeat('    ', 5))
    except ValueError as err:
        print('yep! it failed!', err)
    
    try:
        print(repeat('    ', 15))
    except ValueError as err:
        print('yep! it failed!', err)
    Ответ написан
    3 комментария
  • OS desktop для слабого VPS (512Ram 5Gb)?

    ValdikSS
    @ValdikSS
    https://notes.valdikss.org.ru/linux-for-old-pc-fro...
    https://www.linux.org.ru/gallery/workplaces/16862790
    На фотографии представлен веб-браузер Qutebrowser с 7 открытыми вкладками, в режиме работы с QtWebkit. Как видно, даже с 7 вкладками (2 из которых ­— страницы Википедии с большим количеством картинок) браузер потребляет около 140 мегабайт, что позволяет комфортно сёрфить интернет на смешных 512 МБ RAM.
    Из других браузеров, до сих пор поддерживающих QtWebkit, можно отметить Otter Browser и KDE’шный Konqueror, который дополнительно поддерживает еще и KHTML (3 движка в одном браузере), но в Debian собран только с WebEngine. Первый в репозиториях Debian не присутствует.
    Браузер Seamonkey, актуальная версия которого построена на базе движка из Firefox 60, работает более-менее сносно, но не блестяще — рендерит дольше QtWebkit’а примерно в 2-3 раза, потребляет заметно больше памяти, зато работает со всеми современными сайтами. Можно использовать в качестве запасного варианта, когда QtWebkit не справляется.
    Ответ написан
    3 комментария
  • Как сделать приветствие discord.py?

    @P3r13cT
    1) Получаешь объект канала, куда хочешь отправить сообщение. Для этого можешь воспользоватся методами клиента.
    2) Вызываешь метод channel.send(content=""), где channel это канал, а внутри кавычек сообщение, которое хочешь отправить
    А вообще, согласен с ответом от fenrir, стоит подучить язык, перед тем как идти бота делать. В ином случае придётся читать одновременно документацию и discord.py, и самого питона (и уметь её читать, что, видимо, проблематично)
    Ответ написан
    Комментировать
  • Ошибка Disnake.py, кто поможет?

    Vindicar
    @Vindicar
    RTFM!
    Ну тебе же английским по белому написали: у объекта класса ApplicationCommandInteraction нет атрибута message. Если залезть в доки, его и впрямь нет. А ты зачем-то дергаешь inter.message.author. Если тебе нужен отправитель команды, то у объекта inter есть такое поле author. Почитай по ссылке.
    Ответ написан
    4 комментария
  • При использовании multiprocessing может ли одновременное считывание из файлов тормозить программу?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Непонятно что ты там переименовываешь. CSV файлы - это файлы последовательного доступа. И чтобы изменить 1 строчку и 1 значение тебе надо создать копию файла с изменением. И оригинал убить. В этом кардинальное отличие от баз данных где файлы имеют блочную структуру и изменнеие касается всегоа 1 db-block (обычно кусочек файла кратный 4-8 килобайт).

    Вот предлагаю обсудить этот вопрос а уже потом подойти к ... муль-ти-про-цессингу или как ты там написал.
    Ответ написан
    2 комментария
  • Как сложить время, которое у меня в переменной форматом 00:00:00?

    @FOUREX
    import datetime
    
    
    total_time = datetime.timedelta()
    lst = ["00:33:33", "00:23:34", "01:32:21"]
    
    for time in lst:
        hours, minutes, seconds = time.split(":")
        hours, minutes, seconds = int(hours), int(minutes), int(seconds)
        total_time += datetime.timedelta(hours=hours, minutes=minutes, seconds=seconds)
    
    print(total_time)
    Ответ написан
    Комментировать
  • Как написать бота, который будет отсылать сообщения других пользователей?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Вариант 1:
    • Изучить основы языка
    • Изучить документацию
    • Научиться гуглить
    • Написать

    Вариант 2: Отправиться на фриланс
    Ответ написан
    Комментировать
  • Возможно ли связать два python приложения?

    Dr_Elvis
    @Dr_Elvis Куратор тега Python
    В гугле забанен
    Возможно
    Ответ написан
    2 комментария
  • Как сделать чтобы бот telegramm отправлял сообщения с discord сервера (сервер ds не мой)?

    @xxxtested
    Если дискорд сервер не Ваш, то для получения сообщений можно использовать self-bot библиотеку discum
    https://github.com/Merubokkusu/Discord-S.C.U.M
    Пример: https://github.com/Merubokkusu/Discord-S.C.U.M/blo...
    Ответ написан
    1 комментарий