Skip to content

Commit d67119c

Browse files
authored
Merge pull request CloudBotIRC#147 from linuxdaemon/gonzobot+autojoin
Add autojoin plugin
2 parents 8676570 + f11de04 commit d67119c

1 file changed

Lines changed: 52 additions & 0 deletions

File tree

plugins/autojoin.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import asyncio
2+
3+
from sqlalchemy import PrimaryKeyConstraint, Column, String, Table, and_
4+
from sqlalchemy.exc import IntegrityError
5+
6+
from cloudbot import hook
7+
from cloudbot.util import database
8+
9+
table = Table(
10+
'autojoin',
11+
database.metadata,
12+
Column('conn', String),
13+
Column('chan', String),
14+
PrimaryKeyConstraint('conn', 'chan')
15+
)
16+
17+
18+
def get_channels(db, conn):
19+
return db.execute(table.select().where(table.c.conn == conn.name.casefold())).fetchall()
20+
21+
22+
@asyncio.coroutine
23+
@hook.irc_raw('004')
24+
def do_joins(db, conn, async):
25+
chans = async(get_channels, db, conn)
26+
for chan in chans:
27+
conn.join(chan[1])
28+
yield from asyncio.sleep(0.4)
29+
30+
31+
@hook.irc_raw('JOIN', singlethread=True)
32+
def add_chan(db, conn, chan, nick):
33+
if nick.casefold() == conn.nick.casefold():
34+
try:
35+
db.execute(table.insert().values(conn=conn.name.casefold(), chan=chan.casefold()))
36+
db.commit()
37+
except IntegrityError:
38+
pass
39+
40+
41+
@hook.irc_raw('PART', singlethread=True)
42+
def on_part(db, conn, chan, nick):
43+
if nick.casefold() == conn.nick.casefold():
44+
db.execute(table.delete().where(and_(table.c.conn == conn.name.casefold(), table.c.chan == chan.casefold())))
45+
db.commit()
46+
47+
48+
@hook.irc_raw('KICK', singlethread=True)
49+
def on_kick(db, conn, chan, target):
50+
if target.casefold() == conn.nick.casefold():
51+
db.execute(table.delete().where(and_(table.c.conn == conn.name.casefold(), table.c.chan == chan.casefold())))
52+
db.commit()

0 commit comments

Comments
 (0)