4
4
Requires:
5
5
server_info.py
6
6
"""
7
+ import asyncio
7
8
import gc
8
9
import json
9
10
import logging
27
28
28
29
logger = logging .getLogger ("cloudbot" )
29
30
31
+ data_lock = asyncio .Lock ()
32
+
30
33
31
34
class WeakDict (dict ):
32
35
"""
@@ -517,7 +520,7 @@ def replace_user_data(conn, chan_data):
517
520
del chan_data .users [old_nick ]
518
521
519
522
520
- @hook .irc_raw ([" 353" , " 366" ], singlethread = True , do_sieve = False )
523
+ @hook .irc_raw ([' 353' , ' 366' ], singlethread = True , lock = data_lock , do_sieve = False )
521
524
def on_names (conn , irc_paramlist , irc_command ):
522
525
"""
523
526
:type conn: cloudbot.client.Client
@@ -587,7 +590,7 @@ def serialize(self, mapping, **kwargs):
587
590
return json .dumps (self ._serialize (mapping ), ** kwargs )
588
591
589
592
590
- @hook .permission ("chanop" )
593
+ @hook .permission ("chanop" , lock = data_lock , do_sieve = False )
591
594
def perm_check (chan , conn , nick ):
592
595
"""
593
596
:type chan: str
@@ -678,7 +681,7 @@ def getdata_cmd(conn, chan, nick):
678
681
return web .paste (MappingSerializer ().serialize (memb , indent = 2 ))
679
682
680
683
681
- @hook .irc_raw ([" PRIVMSG" , " NOTICE" ] , do_sieve = False )
684
+ @hook .irc_raw ([' PRIVMSG' , ' NOTICE' ], lock = data_lock , do_sieve = False )
682
685
def on_msg (conn , nick , user , host , irc_paramlist ):
683
686
chan , * other_data = irc_paramlist
684
687
@@ -702,7 +705,7 @@ def on_msg(conn, nick, user, host, irc_paramlist):
702
705
memb .data ["last_privmsg" ] = time .time ()
703
706
704
707
705
- @hook .periodic (600 )
708
+ @hook .periodic (600 , lock = data_lock , do_sieve = False )
706
709
def clean_pms (bot ):
707
710
cutoff = time .time () - 600
708
711
for conn in bot .connections .values ():
@@ -719,7 +722,7 @@ def clean_pms(bot):
719
722
pass
720
723
721
724
722
- @hook .irc_raw ("JOIN" , do_sieve = False )
725
+ @hook .irc_raw ("JOIN" , lock = data_lock , do_sieve = False )
723
726
def on_join (nick , user , host , conn , irc_paramlist ):
724
727
"""
725
728
:type nick: str
@@ -746,7 +749,7 @@ def on_join(nick, user, host, conn, irc_paramlist):
746
749
user_data .join_channel (chan_data )
747
750
748
751
749
- @hook .irc_raw (" MODE" , do_sieve = False )
752
+ @hook .irc_raw (' MODE' , lock = data_lock , do_sieve = False )
750
753
def on_mode (chan , irc_paramlist , conn ):
751
754
"""
752
755
:type chan: str
@@ -784,7 +787,7 @@ def on_mode(chan, irc_paramlist, conn):
784
787
member .sort_status ()
785
788
786
789
787
- @hook .irc_raw (" PART" , do_sieve = False )
790
+ @hook .irc_raw (' PART' , lock = data_lock , do_sieve = False )
788
791
def on_part (chan , nick , conn ):
789
792
"""
790
793
:type chan: str
@@ -799,7 +802,7 @@ def on_part(chan, nick, conn):
799
802
del chan_data .users [nick ]
800
803
801
804
802
- @hook .irc_raw (" KICK" , do_sieve = False )
805
+ @hook .irc_raw (' KICK' , lock = data_lock , do_sieve = False )
803
806
def on_kick (chan , target , conn ):
804
807
"""
805
808
:type chan: str
@@ -809,7 +812,7 @@ def on_kick(chan, target, conn):
809
812
on_part (chan , target , conn )
810
813
811
814
812
- @hook .irc_raw (" QUIT" , do_sieve = False )
815
+ @hook .irc_raw (' QUIT' , lock = data_lock , do_sieve = False )
813
816
def on_quit (nick , conn ):
814
817
"""
815
818
:type nick: str
@@ -823,7 +826,7 @@ def on_quit(nick, conn):
823
826
del chan .users [nick ]
824
827
825
828
826
- @hook .irc_raw (" NICK" , do_sieve = False )
829
+ @hook .irc_raw (' NICK' , lock = data_lock , do_sieve = False )
827
830
def on_nick (nick , irc_paramlist , conn ):
828
831
"""
829
832
:type nick: str
@@ -850,7 +853,7 @@ def on_nick(nick, irc_paramlist, conn):
850
853
user_chans [new_nick ] = user_chans .pop (nick )
851
854
852
855
853
- @hook .irc_raw (" ACCOUNT" , do_sieve = False )
856
+ @hook .irc_raw (' ACCOUNT' , lock = data_lock , do_sieve = False )
854
857
def on_account (conn , nick , irc_paramlist ):
855
858
"""
856
859
:type nick: str
@@ -860,7 +863,7 @@ def on_account(conn, nick, irc_paramlist):
860
863
get_users (conn ).getuser (nick ).account = irc_paramlist [0 ]
861
864
862
865
863
- @hook .irc_raw (" CHGHOST" , do_sieve = False )
866
+ @hook .irc_raw (' CHGHOST' , lock = data_lock , do_sieve = False )
864
867
def on_chghost (conn , nick , irc_paramlist ):
865
868
"""
866
869
:type nick: str
@@ -873,7 +876,7 @@ def on_chghost(conn, nick, irc_paramlist):
873
876
user .host = host
874
877
875
878
876
- @hook .irc_raw (" AWAY" , do_sieve = False )
879
+ @hook .irc_raw (' AWAY' , lock = data_lock , do_sieve = False )
877
880
def on_away (conn , nick , irc_paramlist ):
878
881
"""
879
882
:type nick: str
@@ -890,7 +893,7 @@ def on_away(conn, nick, irc_paramlist):
890
893
user .away_message = reason
891
894
892
895
893
- @hook .irc_raw (" 352" , do_sieve = False )
896
+ @hook .irc_raw (' 352' , lock = data_lock , do_sieve = False )
894
897
def on_who (conn , irc_paramlist ):
895
898
"""
896
899
:type irc_paramlist: cloudbot.util.parsers.irc.ParamList
@@ -910,7 +913,7 @@ def on_who(conn, irc_paramlist):
910
913
user .is_oper = is_oper
911
914
912
915
913
- @hook .irc_raw (" 311" , do_sieve = False )
916
+ @hook .irc_raw (' 311' , lock = data_lock , do_sieve = False )
914
917
def on_whois_name (conn , irc_paramlist ):
915
918
"""
916
919
:type irc_paramlist: cloudbot.util.parsers.irc.ParamList
@@ -923,7 +926,7 @@ def on_whois_name(conn, irc_paramlist):
923
926
user .realname = realname
924
927
925
928
926
- @hook .irc_raw (" 330" , do_sieve = False )
929
+ @hook .irc_raw (' 330' , lock = data_lock , do_sieve = False )
927
930
def on_whois_acct (conn , irc_paramlist ):
928
931
"""
929
932
:type irc_paramlist: cloudbot.util.parsers.irc.ParamList
@@ -933,7 +936,7 @@ def on_whois_acct(conn, irc_paramlist):
933
936
get_users (conn ).getuser (nick ).account = acct
934
937
935
938
936
- @hook .irc_raw (" 301" , do_sieve = False )
939
+ @hook .irc_raw (' 301' , lock = data_lock , do_sieve = False )
937
940
def on_whois_away (conn , irc_paramlist ):
938
941
"""
939
942
:type irc_paramlist: cloudbot.util.parsers.irc.ParamList
@@ -945,7 +948,7 @@ def on_whois_away(conn, irc_paramlist):
945
948
user .away_message = msg
946
949
947
950
948
- @hook .irc_raw (" 312" , do_sieve = False )
951
+ @hook .irc_raw (' 312' , lock = data_lock , do_sieve = False )
949
952
def on_whois_server (conn , irc_paramlist ):
950
953
"""
951
954
:type irc_paramlist: cloudbot.util.parsers.irc.ParamList
@@ -955,7 +958,7 @@ def on_whois_server(conn, irc_paramlist):
955
958
get_users (conn ).getuser (nick ).server = server
956
959
957
960
958
- @hook .irc_raw (" 313" , do_sieve = False )
961
+ @hook .irc_raw (' 313' , lock = data_lock , do_sieve = False )
959
962
def on_whois_oper (conn , irc_paramlist ):
960
963
"""
961
964
:type irc_paramlist: cloudbot.util.parsers.irc.ParamList
0 commit comments