Awesome
šÆ honeybot py [ docs ]
<div align="center"> <img src="./assets/honeybot_real.png" width="64" />Launching pyhoneybot Rewards
Contributed to pyhoneybot? Here is a big thank you from our community to you. Claim your badge and showcase them with pride. Let us inspire more folks !
Claim Now!
<hr> š²šŗ šŗšø šØš¦ š¦š· š®š³ š¬š§ š¬š¬ š§š· šøš½ šµš± š©šŖ š²š¼ š²š¦ </div> <div align="center"> </div>Table of Contents
- š® About
- š¹ Project Motivation
- ā Current Features
- :mountain: GUI clients
- ā Current Plugins
- ā” Quickstart
- š» Seeing The Bot In Action
- Docker
- š§ Plugins Development
- š Contributing Guide
- š Todo Plugins
- ā Allowing Plugins
- :thought_balloon: Project Testimonials
- š§ Contact (Including vulnerabilities)
- š Credits
š® About
HoneyBot is a python-based IRC bot. (python3.7) | If you want to just run the bot, go to the quick start section
HoneyBot is my first time collaborating to an open source project and I'm loving it. Before discovering HoneyBot, I was very intimidated on the idea of working with other people and had no idea what an IRC even was. Now I realize how much fun and rewarding it is to work together on a project with dedicated and friendly individuals. The documentation is easy to follow and everyone is super helpful. I highly recommend any new programmer who want to contribute on an open source project to try out HoneyBot. Personally I enjoy working on this project more than my own schoolwork. --@RiceAbove
Feel free to contribute to the project!
š¹ Project Motivation
Implementing the project in Java was weird, py's connect was sleek. Thus, the project stack was shifted over to Python. If you can think of any features, plugins, or functionality you wish to see in the project. Feel free to add it yourself, or create an issue detailing your ideas. We highly recommend you attempt to implement it yourself first and ask for help in our discord server !
Psst. Since I learnt py through this bot, we decided to keep a new-comers friendly policy. Feeling lost? Just ping.
ā Current Features
- š¬ OOP architecture
- š°ļø keyword parameters
- šµ password security with config file [disabled for now]
- š now with plugins
:mountain: GUI clients
GUI clients are used to manage plugins, launch bot as well as specify credentials.
ā Current Plugins
Plugin | Description | Contributor |
---|---|---|
š bitcoin | Get price of bitcoin | @Macr0Nerd |
ā² caesar cipher | Encode your text | @kylegalloway |
š¢ calc | Evaluates maths expressions | @Abdur-rahmaanJ |
š maths | Trigonometry & random number generator | @Abdur-rahmaanJ |
š conv sniff | Set triggers like how many times a word occur for one or more words and send response | @Abdur-rahmaanJ |
ā greet | Demo plugin | @Abdur-rahmaanJ |
ā installed_modules | Checks dependencies installed | @Abdur-rahmaanJ |
š¶ joke | Get random joke | @Abdur-rahmaanJ, @colbyjayallen |
ā self Trivia | Random trivia | @ajimenezUCLA |
š¢ username | Username generator | @Abdur-rahmaanJ, @sseryani |
š quotes | Inspirational quotes | @German-Corpaz |
š dictionary | Returns meaning of word | @iamnishant14 |
š£ password generator | The name tells it all | @iamnishant14 |
š debug | Prints all parameters passed to bot | @Abdur-rahmaanJ |
š wikipedia | Returns a wikipedia article | @Macr0Nerd |
šæ translate | Google translate plugin | @a-deeb |
š test | Runs tests | @Abdur-rahmaanJ |
ā ļø weather | Returns weather info for a given location | @Macr0Nerd |
āļø mail | Send emails within the chat | @TannerFry |
š“ļø hangman | Play hangman in the chat | @JustinWalker4179 |
š age | Takes in birthday and outputs age | @JustinWalker4179 |
āļø fact | Returns a random fact | @JustinWalker4179 |
š google | Returns three search results from google | @JustinWalker4179 |
š® send message | Sends a message to another channel | @JustinWalker4179 |
š log | Logs the chat into a log file | @RiceAbove |
šŖ joins | Greets everyone who joins the channel | @RiceAbove |
š date | Posts the current date | @RiceAbove |
šµļøā riddle | Returns a random riddle | @AngeloGiacco |
š news | Gets the top 10 headlines from bbc world news | @AngeloGiacco |
š horoscope | Gets your daily horoscope for your starsign | @AngeloGiacco |
šµ currency converter | Converts currencies | @AngeloGiacco |
š« russian_roulette | May or may not kick you off the channel | @AngeloGiacco |
šØ monopoly | Honeybot now supports the world's worst game! | @AngeloGiacco |
ā½ļø transfer_rumour | Shows the day's transfer rumours | @AngeloGiacco |
š blackjack/21 | Play 21 on honeybot! | @AngeloGiacco |
š¤ corona | Get the latest news on coronavirus with honeybot! | @AngeloGiacco |
š diary | Keep a diary with honeybot | @AngeloGiacco |
š© flight | Gets flight info from flightradar24 | @AngeloGiacco |
š² roll | Rolls a dice | @GlennToms |
ā help | Show link to plugin's information page | @edumello |
ā channeljoin | Join command for bot | @marceloyb |
:page_with_curl: comic | Returns a random comic | @mboekhold |
š todo | Makes a to do list | @h-ranjan1110 |
š± Magic 8 Ball | Answer questions using magic 8 ball | @ZakariaTalhami |
š Random Excuse | Generates a random excuse for you. | @rakeshseal0 |
š¦ DuckDuckGo Search | Search queries in duckduckgo and return abstract. | @rakeshseal0 |
š¼ Random Image | Returns a random image url. | @rakeshseal0 |
š¢ URL Shortener | Shortens a url | @rakeshseal0 |
š emoji | Returns emoji meaning | @deadex-ng |
š birthday | Shows birthday match probability on a people group. | @paulosgf |
š basketball | Shows information about the medals of euroBasket and Basketball world cup | @kefthymic |
š¬ movies_imdb | Returns certain information about a certain movie or shows 250 all time best movies | @ZoeyKats |
ā” Quickstart
setup
mkdir botx
cd botx
python -m venv venv
venv\scripts\activate # or source venv/bin/activate for linux
python -m pip install honeybot
run
honeybot init
honeybot run
in settings/CONNECT.conf
[INFO]
server_url = irc.libera.chat
port = 6667
name = appinventormuBot
In settings/PLUGINS.conf listed plugins under plugins/downloaded will load. Plugins listed under plugins/core are auto loaded.
š» Seeing The Bot In Action
Get an IRC client
- Web: Kiwiirc (easy)
- Desktop: Hexchat
- Android: Revolution IRC
configure
port: 6667
url: irc.libera.chat
then join channel #ltch
you should see the bot as hbot ... or as it's name is in settings
Docker
Building Docker image
Change SERVER, PORT and NICKNAME variables to match your preferences
docker build -t "honeybot/honeybot:6.0.2" .
Running Docker image
docker run -d --name=honeybot honeybot/honeybot:v6.0.2 honeybot run
š§ Plugins Development
Each plugin has a folder named after it. In it there is a file called main.py. In each there is a class called Plugin.
# -*- coding: utf-8 -*-
class Plugin:
def __init__(self):
pass
def run(self, incoming, methods, info, bot_info):
try:
if info['command'] == 'PRIVMSG' and info['args'][1] == '.hi':
methods['send'](info['address'], 'hooo')
except Exception as e:
print('woops plugin error ', e)
we see four parameters being passed to the run method , incoming, methods, info, bot_info)
parameter1: incoming
incoming
is the raw line and is not used except if you are not satisfied with the already provided methods
parameter2: methods
methods
is a dictionary of methods to ease your life. a quick look at main.py reveals
def methods(self):
return {
'send_raw': self.send,
'send': self.send_target,
'join': self.join
}
where send_raw
allows you to send in any string you want, thereby allowing you to implement any irc protocol from scratch
but, for most uses, send
allows you to send a message to an address methods['send']('<address>', '<message>')
. using it in conjunction with info parameter allows you to send messages where it came from, in pm to the bot or in a channel. you can however hardcode the address.
join
allows you to join a channel by methods['join']('<channel name>')
parameter3: info (meaning message info)
for a normal run, info produces
{
'prefix': 'appinv!c5e342c5@gateway/web/cgi-irc/kiwiirc.com/ip.200.200.22.200',
'command': 'PRIVMSG',
'address': '##bottestingmu',
'args': ['##bottestingmu', 'ef']
}
hence if you want messages, messages = info['args'][1:]
or the first word if you want to check for command will be info['args'][1]
use example
- the command info is used in the join channel plugin to detect a join command and greet the user who just joined
bot info
bot_info returns info about the bot
return {
'name': self.name,
'special_command': self.sp_command,
'required_modules': self.required_modules,
'owners': self.owners,
'time': self.time,
'friends': self.friends
}
so that in run method you can access those.
use example
- For example, the time info is used in the uptime plugin by minussing it from the current time to get time bot has been running.
- The required modules is used in the installed plugin to determine what required plugin the bot runner did not install
wrapping up
hence
if info['command'] == 'PRIVMSG' and info['args'][1] == '.hi':
methods['send'](info['address'], 'hooo')
from above means
if message received == .hi:
send(address, message)
š Contributing Guide
https://pyhoneybot.github.io/honeybot/How_Tos/contributing.html
- don't forget to add your country flag here after accepted PR. i'll have to hunt it down on your profile if not.
- make sure to follow PEP8
Check out Contributing to get started on contributing.
š Todo Plugins
- š humour
- šØļø weather
- āļø mail
- šļø maths
- š„ pm when user online
- Random Colour
ā Allowing Plugins
Plugins available https://pyhoneybot.github.io/honeybot/plugins.html
in settings/settings.toml, add the plugin to allow!
[PLUGINS]
downloaded = ["greet",] # Downloaded plugins to load
š§ Contact (Including vulnerabilities)
- Abdur-Rahmaan Janhangeer | arj.python@gmail.com
š Credits
- @arwinneil, "Open Source" and "Made In Moris" badges