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
28
29
29
30
logger = logging .getLogger ("cloudbot" )
30
31
32
+ data_lock = asyncio .Lock ()
33
+
31
34
32
35
class MemberNotFoundException (KeyError ):
33
36
def __init__ (self , name , chan ):
@@ -513,7 +516,7 @@ def replace_user_data(conn, chan_data):
513
516
del chan_data .users [old_nick ]
514
517
515
518
516
- @hook .irc_raw ([" 353" , " 366" ], singlethread = True , do_sieve = False )
519
+ @hook .irc_raw ([' 353' , ' 366' ], singlethread = True , lock = data_lock , do_sieve = False )
517
520
def on_names (conn , irc_paramlist , irc_command ):
518
521
"""
519
522
:type conn: cloudbot.client.Client
@@ -583,7 +586,7 @@ def serialize(self, mapping, **kwargs):
583
586
return json .dumps (self ._serialize (mapping ), ** kwargs )
584
587
585
588
586
- @hook .permission ("chanop" )
589
+ @hook .permission ("chanop" , lock = data_lock , do_sieve = False )
587
590
def perm_check (chan , conn , nick ):
588
591
"""
589
592
:type chan: str
@@ -685,7 +688,7 @@ def handle_tags(conn: IrcClient, nick: str, irc_tags: TagList) -> None:
685
688
user_data .account = account_tag .value
686
689
687
690
688
- @hook .irc_raw (["PRIVMSG" , "NOTICE" ], do_sieve = False )
691
+ @hook .irc_raw (["PRIVMSG" , "NOTICE" ], lock = data_lock , do_sieve = False )
689
692
def on_msg (conn , nick , user , host , irc_paramlist ):
690
693
chan = irc_paramlist [0 ]
691
694
@@ -709,7 +712,7 @@ def on_msg(conn, nick, user, host, irc_paramlist):
709
712
memb .data ["last_privmsg" ] = time .time ()
710
713
711
714
712
- @hook .periodic (600 )
715
+ @hook .periodic (600 , lock = data_lock , do_sieve = False )
713
716
def clean_pms (bot ):
714
717
cutoff = time .time () - 600
715
718
for conn in bot .connections .values ():
@@ -726,7 +729,7 @@ def clean_pms(bot):
726
729
pass
727
730
728
731
729
- @hook .irc_raw ("JOIN" , do_sieve = False )
732
+ @hook .irc_raw ("JOIN" , lock = data_lock , do_sieve = False )
730
733
def on_join (nick , user , host , conn , irc_paramlist ):
731
734
"""
732
735
:type nick: str
@@ -753,7 +756,7 @@ def on_join(nick, user, host, conn, irc_paramlist):
753
756
user_data .join_channel (chan_data )
754
757
755
758
756
- @hook .irc_raw (" MODE" , do_sieve = False )
759
+ @hook .irc_raw (' MODE' , lock = data_lock , do_sieve = False )
757
760
def on_mode (chan , irc_paramlist , conn ):
758
761
"""
759
762
:type chan: str
@@ -791,7 +794,7 @@ def on_mode(chan, irc_paramlist, conn):
791
794
member .sort_status ()
792
795
793
796
794
- @hook .irc_raw (" PART" , do_sieve = False )
797
+ @hook .irc_raw (' PART' , lock = data_lock , do_sieve = False )
795
798
def on_part (chan , nick , conn ):
796
799
"""
797
800
:type chan: str
@@ -806,7 +809,7 @@ def on_part(chan, nick, conn):
806
809
del chan_data .users [nick ]
807
810
808
811
809
- @hook .irc_raw (" KICK" , do_sieve = False )
812
+ @hook .irc_raw (' KICK' , lock = data_lock , do_sieve = False )
810
813
def on_kick (chan , target , conn ):
811
814
"""
812
815
:type chan: str
@@ -816,7 +819,7 @@ def on_kick(chan, target, conn):
816
819
on_part (chan , target , conn )
817
820
818
821
819
- @hook .irc_raw (" QUIT" , do_sieve = False )
822
+ @hook .irc_raw (' QUIT' , lock = data_lock , do_sieve = False )
820
823
def on_quit (nick , conn ):
821
824
"""
822
825
:type nick: str
@@ -830,7 +833,7 @@ def on_quit(nick, conn):
830
833
del chan .users [nick ]
831
834
832
835
833
- @hook .irc_raw (" NICK" , do_sieve = False )
836
+ @hook .irc_raw (' NICK' , lock = data_lock , do_sieve = False )
834
837
def on_nick (nick , irc_paramlist , conn ):
835
838
"""
836
839
:type nick: str
@@ -857,7 +860,7 @@ def on_nick(nick, irc_paramlist, conn):
857
860
user_chans [new_nick ] = user_chans .pop (nick )
858
861
859
862
860
- @hook .irc_raw (" ACCOUNT" , do_sieve = False )
863
+ @hook .irc_raw (' ACCOUNT' , lock = data_lock , do_sieve = False )
861
864
def on_account (conn , nick , irc_paramlist ):
862
865
"""
863
866
:type nick: str
@@ -867,7 +870,7 @@ def on_account(conn, nick, irc_paramlist):
867
870
get_users (conn ).getuser (nick ).account = irc_paramlist [0 ]
868
871
869
872
870
- @hook .irc_raw (" CHGHOST" , do_sieve = False )
873
+ @hook .irc_raw (' CHGHOST' , lock = data_lock , do_sieve = False )
871
874
def on_chghost (conn , nick , irc_paramlist ):
872
875
"""
873
876
:type nick: str
@@ -880,7 +883,7 @@ def on_chghost(conn, nick, irc_paramlist):
880
883
user .host = host
881
884
882
885
883
- @hook .irc_raw (" AWAY" , do_sieve = False )
886
+ @hook .irc_raw (' AWAY' , lock = data_lock , do_sieve = False )
884
887
def on_away (conn , nick , irc_paramlist ):
885
888
"""
886
889
:type nick: str
@@ -897,7 +900,7 @@ def on_away(conn, nick, irc_paramlist):
897
900
user .away_message = reason
898
901
899
902
900
- @hook .irc_raw (" 352" , do_sieve = False )
903
+ @hook .irc_raw (' 352' , lock = data_lock , do_sieve = False )
901
904
def on_who (conn , irc_paramlist ):
902
905
"""
903
906
:type irc_paramlist: cloudbot.util.parsers.irc.ParamList
@@ -917,7 +920,7 @@ def on_who(conn, irc_paramlist):
917
920
user .is_oper = is_oper
918
921
919
922
920
- @hook .irc_raw (" 311" , do_sieve = False )
923
+ @hook .irc_raw (' 311' , lock = data_lock , do_sieve = False )
921
924
def on_whois_name (conn , irc_paramlist ):
922
925
"""
923
926
:type irc_paramlist: cloudbot.util.parsers.irc.ParamList
@@ -930,7 +933,7 @@ def on_whois_name(conn, irc_paramlist):
930
933
user .realname = realname
931
934
932
935
933
- @hook .irc_raw (" 330" , do_sieve = False )
936
+ @hook .irc_raw (' 330' , lock = data_lock , do_sieve = False )
934
937
def on_whois_acct (conn , irc_paramlist ):
935
938
"""
936
939
:type irc_paramlist: cloudbot.util.parsers.irc.ParamList
@@ -940,7 +943,7 @@ def on_whois_acct(conn, irc_paramlist):
940
943
get_users (conn ).getuser (nick ).account = acct
941
944
942
945
943
- @hook .irc_raw (" 301" , do_sieve = False )
946
+ @hook .irc_raw (' 301' , lock = data_lock , do_sieve = False )
944
947
def on_whois_away (conn , irc_paramlist ):
945
948
"""
946
949
:type irc_paramlist: cloudbot.util.parsers.irc.ParamList
@@ -952,7 +955,7 @@ def on_whois_away(conn, irc_paramlist):
952
955
user .away_message = msg
953
956
954
957
955
- @hook .irc_raw (" 312" , do_sieve = False )
958
+ @hook .irc_raw (' 312' , lock = data_lock , do_sieve = False )
956
959
def on_whois_server (conn , irc_paramlist ):
957
960
"""
958
961
:type irc_paramlist: cloudbot.util.parsers.irc.ParamList
@@ -962,7 +965,7 @@ def on_whois_server(conn, irc_paramlist):
962
965
get_users (conn ).getuser (nick ).server = server
963
966
964
967
965
- @hook .irc_raw (" 313" , do_sieve = False )
968
+ @hook .irc_raw (' 313' , lock = data_lock , do_sieve = False )
966
969
def on_whois_oper (conn , irc_paramlist ):
967
970
"""
968
971
:type irc_paramlist: cloudbot.util.parsers.irc.ParamList
0 commit comments