Как написать спам бота на python
Перейти к содержимому

Как написать спам бота на python

  • автор:

Создание дискорд бота для спама

Короче, хотел для тренировки создать бот для дискорда, который как только кто нибудь вводит сообщение «spam в чат дискорд-сервера, бот начинал спамить одно сообщение «SPAM, а как только кто нибудь вводил «stop то он бы останавливался, но у меня не получилось и он не останавливается, а продолжает спамить! Как решить данную проблему (мне нужен не только совет как это исправить, но и исправленный код, пожалуйста) Код вверху

Отслеживать
задан 16 фев 2022 в 11:41
1 1 1 бронзовый знак

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

В асинхроне не силен но суть думаю плюс минус одна.

У тебя обработчик сообщений получил слово спам и ушёл в бесконечный цикл отправки.. и пока он в бесконечном цикле он не получит заветное слово стоп .

 spam = False #Создаем переменную спам, и устанавливаем значение фолс @client.event async def on_message(message): if message.content.lower() == '"spam': spam = True #Задаём true while spam: #Если spam true то спамим, а если false то перестаём. await message.channel.send('SPAM') time.sleep(2) if message.content.lower() == '"stop': spam = False #Получили смс стоп, задали фолс для остановки спама 

Как сделать спам бота vk_api python?

Задача такая —
Чтобы при написании сообщения, начинал спамить бот в лс,если человек напишет стоп то бот остановится,реализовал почти всё только не знаю как реализовать чтобы бот не 1 раз отвечал в лс а бесконечно..
Помогите пожалуйста,вот код ->

from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType import vk_api import vk import random import time print('Бот успешно запущен!') vk = vk_api.VkApi(token="Тут мой token") vk._auth_token() vk.get_api() longpoll = VkBotLongPoll(vk,Тут id моей группы) while True: try: messages = vk.method("messages.getConversations", ) if messages["count"] >= 1: body = messages["items"][0]["last_message"]["text"] if body.lower() == "начать спам": vk.method("messages.send", ) elif body.lower() == "разрешаю": vk.method("messages.send", ) elif body.lower() == "стоп": vk.method("messages.send", ) except Exception as E: time.sleep(1)
  • Вопрос задан более трёх лет назад
  • 7238 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 1

riky

все методы из раздела messages.* с февраля 2019 закрыты для широкой публики.
так что код в любом случае работать не будет.

Ответ написан более трёх лет назад
mrisid @mrisid Автор вопроса

* Это изменение не затронет бот-платформу в сообществах, пользователей веб-версии vk.com и официальных мобильных приложений ВКонтакте. *

У меня сообщество,мне не чего не грозит

Ваш ответ на вопрос

Войдите, чтобы написать ответ

python

  • Python
  • +1 ещё

Почему при большом количестве строк async выдает ошибку?

  • 1 подписчик
  • 2 часа назад
  • 29 просмотров

Создание messengers бота на Python. Полное руководство

Функционал из данного гайда был перенесен на messengers Business API, с помощью которого вы также сможете производить рассылки, создавать чат боты и многое другое, но без риска быть заблокированным. В связи с изменением условий работы API, в данном гайде частично могут использоваться неактуальные сведения. Пожалуйста, посмотрите документацию перед началом работы. Сейчас Chat API предлагает самый доступный и автоматизированный messengers Business API на рынке с Многопользовательским Чатом, Визуальным конструктором ботов, готовыми интеграциями приложений и другими полезными функциями.

  • Вывод списка команд
  • Вывод ID текущего чата
  • Вывод текущего времени сервера, на котором работает бот.
  • Вывод вашего имени
  • Отправка файлов разных форматов (pdf, jpg, doc, mp3 и т.д.)
  • Отправка заранее записанных голосовых сообщений
  • Отправка гео-координат (локации)
  • Создание конференции (группы)

Внимание: чтобы бот работал, телефон должен быть всегда подключен к интернету и не должен использоваться для messengers Web

Подготовительная работа

В самом начале, сразу свяжем messengers с нашим скриптом, чтобы по мере написания кода — проверять его работу. Для этого переходим в личный кабинет и получаем там QR-код. Далее открываем messengers на мобильном телефоне, заходим в Настройки -> messengers Web -> Сканируем QR-код.

Теперь, чтобы сервер вызывал наш скрипт при новых сообщениях, нужно указать WebHook URL. WebHook URL – это ссылка, куда будут посылаться, методом POST, JSON–данные с информацией о входящих сообщениях или уведомлениях. Соответственно, чтобы бот работал нам требуется сервер – который эти данные будет принимать и обрабатывать. При написании этой статьи, мы развернули у себя сервер с помощью микро-фраемворка FLASK. Он позволяет удобно реагировать на входящие запросы и обрабатывать их.

Пишем инициализацию класса бота

Создадим файл “wabot.py” и в нем опишем класс для нашего бота. Нам потребуется импортировать данные библиотеки:

import json import requests import datetime 

Библиотека json отвечает за обработку формата Json. Requests – Нужен нам для того, чтобы обращаться к API сайта.

Далее создадим класс WABot

class WABot(): def __init__(self, json): self.json = json self.dict_messages = json['messages'] self.APIUrl = 'https://eu41.chat-api.com/instance12345/' self.token = 'abcdefg' 

В нем мы опишем конструктор класса, который по умолчанию будет принимать json – тот самый, что будет содержать информацию о входящих сообщениях (Его будет принимать Webhook и передавать в наш класс). Для того, чтобы узнать, как будет выглядеть принимаемый json – можно зайти в удобный раздел тестирования, который мы предоставляем в личном кабинете. В нем можно протестировать запросы и Webhook.

Здесь мы присваиваем атрибутам класса значения. Dict_messages – Словарь, который содержит информацию из сообщения в json файле, который мы приняли

self.json = json self.dict_messages = json['messages'] 

Посмотреть структуру json можно в разделе тестирования в элементе «Проверка WebHook». Требуется запустить проверку и отправлять в ваш messengers чат сообщения. На экране будет выводиться json, посылаемый к webhook.

self.APIUrl = 'https://eu41.chat-api.com/instance12345/' self.token = 'abcdefg' 

Вам требуется подставить свои данные APIUrl и token, их мы будем использовать для формирования запроса к API.

Пишем функционал бота

Отправка запросов

Для работы нам потребуется отправлять запросы к API. Напишем функцию, которая будет формировать запросы и отправлять их, исходя из наших параметров.

def send_requests(self, method, data): url = f"?token=" headers = answer = requests.post(url, data=json.dumps(data), headers=headers) return answer.json() 

send_requests — принимает два параметра: method и data.

  • method определяет, какой метод ChatAPI должен быть вызван.
  • data содержит необходимые для пересылки данные.

Подробнее о всех методах можно почитать в документации. Data – это словарь данных из которых мы сформируем json и передадим методом Post на сервер. (Т.к. для нашего функционала бота требуются лишь Post методы, только ими мы и будем пользоваться)

На данном этапе мы формируем строку запроса к API.

url = f"?token=" 

Далее обязательно нужно указать header Contet-Type и пометить его Application/Json, так как мы будем всегда передавать наши данные форматом json.

headers =  

Теперь формируем полноценный запрос с помощью requests.post и передаем на сервер api наши данные. Json.dump(data) – серриализует наш словарь data в формат json.

answer = requests.post(url, data=json.dumps(data), headers=headers) return answer.json() 

Возвращает функции ответ сервера в формате json.

Отправка сообщений

send_message — принимает два параметра: chatId и text.

  • chatId – Id чата, в который необходимо отправить сообщение
  • Text – Текст сообщения

Теперь напишем метод, который позволит отправлять сообщения в наш чат.

def send_message(self, chatId, text): data = answer = self.send_requests('sendMessage', data) return answer 

Формируем словарь data, который содержит в себе тело “chatId” — Id, куда требует отправить сообщение и тело ‘body’ с необходимым нам текстом.

data =

Далее передаем наши данные в метод, который мы написали в предыдущем этапе

answer = self.send_requests('sendMessage', data) return answer

Для того чтобы отправить сообщение в Chat Api используется метод «sendMessage», поэтому его мы и передаем в функции в качестве параметра вместе с нашим словарем data. И возвращаем ответ сервера.

Приветствие

Метод welcome будем вызывать по команде “hi” бота и при вводе несуществующей команды.

  • chatId – Id чата, в который необходимо отправить сообщение
  • noWelcome – Булева переменная, определяющая какой текст будет отправлен в чат: приветствие или список команд. По умолчанию False.
def welcome(self,chatId, noWelcome = False): welcome_string = '' if (noWelcome == False): welcome_string = "messengers Demo Bot Python\n" else: welcome_string = """Incorrect command Commands: 1. chatId - show ID of the current chat 2. time - show server time 3. me - show your nickname 4. file [format] - get a file. Available formats: doc/gif/jpg/png/pdf/mp3/mp4 5. ptt - get a voice message 6. geo - get a location 7. group - create a group with the bot""" return self.send_message(chatId, welcome_string)

Формируем нашу строку с сообщением исходя из переменной noWelcome и передаем в функцию send_message в качестве отправляемого текста.

Вывод chatId
def show_chat_id(self,chatId): return self.send_message(chatId, f"Chat ID : ")
Вывод времени
def time(self, chatId): t = datetime.datetime.now() time = t.strftime('%d:%m:%Y') return self.send_message(chatId, time)
Функция me

Выводит информацию о имени собеседника по команде ‘me’

def me(self, chatId, name): return self.send_message(chatId, name)
Функция file

Отправляет файл с указанным форматом в диалог

  • chatId – Id чата, в который необходимо отправить сообщение
  • format – формат файла, который необходимо отправить. Все отправляемые файлы хранятся на сервере.
def file(self, chatId, format): availableFiles = if format in availableFiles.keys(): data = < 'chatId' : chatId, 'body': f'https://domain.com/Python/', 'filename' : availableFiles[format], 'caption' : f'Get your file ' > return self.send_requests('sendFile', data)

Здесь мы сформировали словарь, который содержит в качестве ключей необходимые нам форматы, а в качестве значений имена файлов, которые лежат на сервере и ждут отправки:

availableFiles =

Далее проверяем существует ли в нашем словаре формат, который передал пользователь

Если существует – то формируем запрос на отправку файла, где:

if format in availableFiles.keys(): data = < 'chatId' : chatId, 'body': f'https://domain.com/Python/', 'filename' : availableFiles[format], 'caption' : f'Get your file ' > return self.send_requests('sendFile', data)
  • chatId – Id чата, в который необходимо отправить сообщение
  • Body – прямая ссылка до файла, который необходимо отправить
  • Filename – имя файла
  • Caption – текст, который будет отправлен вместе с файлом

Формируем запрос send_requests с параметром “sendFile” и передаем в него наши данные.

Функция ptt

Отправляет голосовое сообщение в диалог

def ptt(self, chatId): data = < "audio" : 'https://domain.com/Python/ptt.ogg', "chatId" : chatId >return self.send_requests('sendAudio', data)

Формируем словарь наших данных, где:

  • chatId – Id чата, в который необходимо отправить сообщение
  • audio – прямая ссылка на файл формата ogg

Отправляем запрос к api методом “sendAudio”

Функция geo
def geo(self, chatId): data = < "lat" : '51.51916', "lng" : '-0.139214', "address" :'Ваш адрес', "chatId" : chatId >answer = self.send_requests('sendLocation', data) return answer
  • chatId – Id чата, в который необходимо отправить сообщение
  • lat – заранее заданные координаты
  • lng – заранее заданные координаты
  • address – ваш адрес или любая необходимая вам строка.

После формирования словаря, отправляем запрос к API методом “sendLocation”

Функция group

Создает группу, в которой будете вы и бот

def group(self, author): phone = author.replace('@c.us', '') data = < "groupName" : 'Group with the bot Python', "phones" : phone, 'messageText' : 'It is your group. Enjoy' >answer = self.send_requests('group', data) return answer

author – тело json, посылаемое webhook, содержит информацию о том, кто отправил сообщение.

Данное тело содержит в себе информацию о номере пользователя, но с дополнительными символами. Вызовем функцию replace и удалим их, оставив лишь номер телефона:

phone = author.replace('@c.us', '')
data =
  • groupName – имя конференции после её создания
  • phones – телефоны необходимых участников конференции, можно передавать массив из нескольких телефонов
  • messageText – Первое сообщение в конференции

Отправляем запрос методом ‘group’

Обрабатываем запросы пользователей

Весь функционал нашего демо-бота мы описали, теперь требуется организовать логику работы бота, чтобы он мог реагировать на команды и взаимодействовать с пользователем. Для этого опишем еще одну функцию

def processing(self): if self.dict_messages != []: for message in self.dict_messages: text = message['body'].split() if not message['fromMe']: if text[0].lower() == 'hi': return self.welcome(id) elif text[0].lower() == 'time': return self.time(id) elif text[0].lower() == 'chatId': return self.show_chat_id(id) elif text[0].lower() == 'me': return self.me(id, message['senderName']) elif text[0].lower() == 'file': return self.file(id, text[1]) elif text[0].lower() == 'ptt': return self.ptt(id) elif text[0].lower() == 'geo': return self.geo(id) elif text[0].lower() == 'group': return self.group(message['author']) else: return self.welcome(id, True) else: return 'NoCommand'

Данную функцию будем вызывать каждый раз, когда будем получать данные в наш webhook.

Разберем её по порядку:

Помните атрибут нашего бота dict_messages, который мы создали в самом начале? Он содержит в себе словари сообщений, которые мы приняли. Данная проверка отсеивает данные, которые не содержат в себе сообщений. Так как к webhook может прийти запрос без сообщения.

if self.dict_messages != []:

В действительности нам может прийти несколько сообщений в одном запросе, и наш бот должен обработать их все. Для этого мы перебираем все словари, который содержит в себе лист dict_messages.

for message in self.dict_messages: text = message['body'].split()

После вхождения в цикл мы объявляем переменную text – которая будет являться листом слов, содержащихся в нашем сообщении. Для этого мы обращаемся к словарю message по ключу [‘body’], чтобы получить текст входящего сообщения и просто вызываем функцию split(), которая позволит разбить текст на слова.

Далее мы делаем проверку, что входящее сообщение не от нас самих, посредством обращения к ключу ‘fromMe”, который содержит в себе True или False и проверяет от кого было сообщение.

Подготовили мануал о том, как написать вацап бота на питоне

Если же данной проверки не будет бот может уйти в бесконечную рекурсию.

Теперь мы получаем id чата из все того же самого словаря message по ключу [‘chatId’]. Обращаемся к первому элементу листа слов, приводим его в нижний регистр, чтобы бот мог реагировать на сообщения написанное КАПСОМ или ЗаБоРчИкОм и сравниваем его с необходимыми нам командами.

После сравнения просто вызываем функционал, который мы описали на предыдущих этапах с параметром id.

Поздравляю, наш бот готов!) Теперь мы можем полноценно реагировать на входящие сообщения.

Вам необходимо только подставить свой токен из личного кабинета и номер инстанса.

Сервер Flask

Для обработки запросов будем использовать сервер Flask. Создадим файл app.py, импортируем все необходимые библиотеки.

from flask import Flask, request, jsonify from wabot import WABot import json app = Flask(__name__) @app.route('/', methods=['POST']) def home(): if request.method == 'POST': bot = WABot(request.json) return bot.processing() if(__name__) == '__main__': app.run()

Инициализируем переменную app, которая будет являться классом Flask.

app = Flask(__name__) @app.route('/', methods=['POST']) def home(): if request.method == 'POST': bot = WABot(request.json) return bot.processing()

И пропишем для неё путь app.route(‘/’, methods = [‘POST’]). Данный декоратор означает, что наша функция home будет вызываться каждый раз, когда к нашему серверу flask будут обращаться посредством post запроса по главному пути.

Делаем проверку того, что к серверу обратились с помощью метода POST. Создаем экземпляр нашего бота и передаем в него json данные.

requests.json – позволяет получить json файлы из тела запроса, который был передан к нашему серверу.

def home(): if request.method == 'POST': bot = WABot(request.json) return bot.processing()

И теперь просто вызываем у нашего объекта метод bot.processing(), который отвечает за обработку запросов.

messengers бот на Python

Теперь необходимо загрузить наш сервер вместе с ботом на хостинг и в качестве webhook указать ваш домен. При каждом входящем сообщение на сервер будут приходить и обрабатываться данные.

Статья Простой спаммер на Python — забавы лишь ради

Сегодня будем писать простенький скрипт на Питоне, который будет проводить спам атаку в сторону нашей жертвы.
Механизм работы кода прост, он пишет выбранное нами слово и нажимая ‘Enter’ отправляет его нашей жертве.
Инструкция написана так, чтобы даже ребенок понимал каждый шаг, так что особых знаний тут не надо, кроме умения пользоваться мышкой и клавиатурой.

2. Подготовка ​

Сначала создадим папку и там же два блокнота, один с них сохраняем, дав название «script.py», второй называем, как «text.txt».
В первый файл будем писать наш код, в второй файл вставим текст на ваш выбор ( ТОЛЬКО НА ЛАТИНИЦЕ ).

3. Приступаем ​

Импортируем модули для автоматизации и заморозки сценария:

import time # Модуль для работы с временем. import pyautogui # Модуль для управления мышью и клавиатурой, точнее главный модуль в нашем программном коде.

Модуль «Time» нужен нам для того, чтобы мы успели активировать поле ввода, прежде чем скрипт начнет спамить.

Теперь создаем первую функцию, роль которой «стрелять» одним сообщением N-ое количество раз:

def SendMessage(): time.sleep(2) # Замораживает скрипт на 2 секунды, чтобы мы успели активировать поле ввода. message = "U ARE UGLY" # Сообщение которое мы хотим отправлять пишем в кавычках. iterations = 1000 # 1000 раз отправляет данное сообщение. for i in range(iterations): pass while iterations > 0: iterations -= 1 pyautogui.typewrite(message.strip()) # Пишет слово/текст написанный в переменной "message" pyautogui.press('enter') # и нажимая Enter, отправляет его нашей "жертве". print("Вся обойма попала в нашу жертву!")

Затем создаем вторую функцию, которая уже отправляет текст вписанный в наш блокнот:

def SendText(): time.sleep(2) with open('text.txt') as f: # Открывает блокнот с названием text.txt (документ с содержанием того, что мы хотим отправлять). lines = f.readlines() for line in lines: pyautogui.typewrite(line.strip()) # В этой функции оно будет писать текст с каждой строки pyautogui.typewrite('enter') # и так же отправлять его "жертве". print("Дело сделано, осталось успокоить нашу жертву ^_^")

Подходим уже к концу, осталось лишь добавить «панель управления»:

print('~'*50) print("[1] ===> Стрелять одним сообщением указанным в переменной ") print("[2] ===> Отправлять строки из блокнота ") print('~'*50) option = input("[Выбирай функцию]===> ") if option == "1": SendMessage() elif option == "2": SendText() else: print('Выбирай функция 1 или 2!')

4. Заканчиваем ​

Осталось лишь найти текст песни/стих или что-то там еще на английском языке и вставить его в наш «text.txt».

Для тех кому лень найти:

Lyrics of Dance Monkey

They say, oh my god, I see the way you shine
Take your hands, my dear, and place them both in mine
You know you stopped me dead while I was passing by
And now I beg to see you dance just one more time
Ooh I see you, see you, see you every time
And, oh my, I, I, I like your style
You, you make me, make me, make me wanna cry
And now I beg to see you dance just one more time
So they say
Dance for me
Dance for me
Dance for me oh oh oh
I’ve never seen anybody do the things you do before
They say
Move for me
Move for me
Move for me ay ay ay
And when you’re done, I’ll make you do it all again
I said, oh my god, I see you walking by
Take my hands, my dear, and look me in my eyes
Just like a monkey I’ve been dancing my whole life
But you just beg to see me dance just one more time
Ooh I see you, see you, see you every time
And, oh my, I, I, I,
I like your style
You, you make me, make me, make me wanna cry
And now I beg to see you dance just one more time
So they say
Dance for me
Dance for me
Dance for me oh oh oh
I’ve never seen anybody do the things you do before
They say
Move for me
Move for me
Move for me ay ay ay
And when you’re done I’ll make you do it all again
They say
Dance for me
Dance for me
Dance for me oh oh oh
I’ve never seen anybody do the things you do before
They say
Move for me
Move for me
Move for me ay ay ay
And when you’re done I’ll make you do it all again
They say
Dance for me
Dance for me
Dance for me oh oh oh
I’ve never seen anybody do the things you do before
They say
Move for me
Move for me
Move for me ay ay ay
And when you’re done I’ll make you do it all again
They say
Dance for me
Dance for me
Dance for me oh oh oh
I’ve never seen anybody do the things you do before
They say
Move for me
Move for me
Move for me ay ay ay
And when you’re done I’ll make you do it all again
All again

По неизвестным мне причинам, скрипт НЕ пишет слова или текст на кириллице, только на латинском.
Чтобы остановить работу нашей машины, нажмите на командую строку и выполните комбинацию Ctrl + C, либо просто закройте командую строку.

Какой-то серьезной опасности или важной опции данный скриптик не выполняет, больше предназначен для забавы.
Идею написания такого я взял у одного иностранца которого именно уже не помню, а сам выполняемый файл был написан мной, так что эта статья её первоисточник

Также приложил видео с обзором работы скрипта:

Это моя первая статья и в Python’e я лишь новичок, так что строго не судите.

«Цветная» версия скриптика:

from termcolor import colored import subprocess import time import pyautogui subprocess.call('', shell=True) def SendMessage(): time.sleep(2) # The message you want to send message = "U ARE UGLY" # How many times do i send a message? iterations = 5 for i in range(iterations): pass while iterations > 0: iterations -= 1 pyautogui.typewrite(message.strip()) pyautogui.press('enter') print('Done, high five') def SendScript(): time.sleep(2) with open('script.txt') as f: lines = f.readlines() for line in lines: pyautogui.typewrite(line.strip()) pyautogui.press('enter') print('It was hard, but we did it, high five.') print(colored('~'*50, 'red')) print(colored('Welcome bro \(O V O)/', 'green')) print(colored("Let's make fun of someone?", 'green')) print(colored('~'*50, 'red')) print(colored("\t[1] ===> Resend the same message (─__─)", 'magenta' )) print(colored("\t[2] ===> Send titles from the script \(v _ v)/", 'magenta')) print(colored('~'*50, 'red')) print('\n') option = input(colored('[Choose an option]==> ', 'cyan')) if option == "1": SendMessage() elif option == "2": SendScript() else: print(colored('Choose a function! ¯\_(-_-)_/¯', 'red'))

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *